• RabbitMQ 声明队列时候的参数解释


    参考链接:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.6/rabbitmq-dotnet-client-3.6.6-client-htmldoc/html/type-RabbitMQ.Client.IModel.html#method-M:RabbitMQ.Client.IModel.BasicConsume(System.String,System.Collections.IDictionary,RabbitMQ.Client.IBasicConsumer)

    创建Connection【高成本,tcp的连接】 可以创建无数个channel【低成本】

    1.QueueDeclare方法 声明队列
    public static QueueDeclareOk QueueDeclare(this IModel model, string queue = "", bool durable = false, bool exclusive = true, bool autoDelete = true, IDictionary<string, object> arguments = null);

    durable:持久化
    mnesia:erlang 数据库,有专门的表去保存我们的队列声明

    exclusive:排外
    当前定义的队列connection中的channel是共享的,其他的connection是访问不到的
    当conneciton.close的时候,queue被删除

    autoDelete:自动删除
    当前最后一个consumer断开之后,autoDelete队列

    agruments:rabbitmq 的扩展


    2.QueueDeclareNoWait方法 声明队列,不等待队列创建结果,异步的

    3.QueueDeclarePassive方法:消极的声明创建,判断队列是否存在,不存在报错


    4.详细说明下QueueDeclare方法agruments(rabbitmq的扩展)

    参考地址:https://www.cnblogs.com/LiangSW/p/6224333.html

    1. 我们要知道到底有哪些参数属性。。。。

    《1》 Message TTL

    <1> Queue TTL =》 Per-Queue Message TTL 【给一个queue的所有message限定一个时间】
    Cache的一个效果。。。
    //声明一个queue,里面的内容自发布起五秒后被删除
    channel.QueueDeclare("messagettlqueue", true, false, false, new Dictionary<string, object> { { "x-message-ttl", 5000 }

    <2> Message TTL =》 单独指定。【定制化的】

    IBasicProperties basicProperties,
    var properties = channel.CreateBasicProperties();
    //设置过期时间
    properties.Expiration = "5000";
    channel.BasicPublish(null, "queue", properties, Encoding.UTF8.GetBytes("我五秒后就会消失"));


    2.Auto Expire 【自动删除】

    《1》 当我们的queue在指定的时间未被访问,就会被删除。。。

    //声明一个queue,queue五秒内而且未被任何形式的消费,则被删除
    channel.QueueDeclare("queue", true, false, false, new Dictionary<string, object> { { "x-expires", 5000 } });

    3. Max Length 限定队列的最大长度。。。 limit =1000

    4. Max Length Bytes 限定队列的最大占用空间大小。。。 【一般来说受制于内存,disk的大小限定】

    //声明一个queue,最大长度10,最大大小2048bytes
    channel.QueueDeclare("queue", true, false, false, new Dictionary<string, object>
    {
    { "x-max-length", 10 },
    { "x-max-length-bytes", 2048}
    });
    redis,memcache。。。 LRU算法。。。淘汰机制。。。。

    5.Dead letter exchagne 与 Dead letter routing key

    何为Dead letter,,也就是说那些没有被投递出去的信件


    一: Dead letter exchange

    有时候我们不希望message被drop掉,而是走到另一个队列中,又或者是保存起来。。。


    二: Dead letter routing key

    打到exchange中去的时候,他的routingkey是什么,,


    和普通定义方式没什么两样。。。

    三: Maximum priority

    优先级加到队列上,就是一个优先级队列,,, 【堆,大根堆,小根堆】

    1. 给队列贴上一个优先级的标签。。。 x-max-priority =10, 这个值不要设置的太大。。。 节点更多。。 sortset。。。

    不管你用什么语言实现,都是一个tree结构。。。。

    2. 给message打上具体的优先级的value。。。 value<=10

    MSMQ的message级别一般也就4,5中。。。low/normal/high/higher//........

    我们通过“优先级”特性,,将一个queue 变成了 stack。。。。

  • 相关阅读:
    Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)
    Spring Boot 2 快速教程:WebFlux 快速入门(二)
    ES 集群上,业务单点如何优化升级?
    Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)
    泥瓦匠想做一个与众不同的技术"匠"
    java编程行业微信群,无论新手老手欢迎加入,会一直更新
    Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
    解决方案:如何防止数据重复插入?
    阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?
    品阿里 Java 开发手册有感
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/10244210.html
Copyright © 2020-2023  润新知