美文网首页程序员
RabbitMQ之Queue介绍

RabbitMQ之Queue介绍

作者: 不知名的程序员 | 来源:发表于2018-07-22 14:52 被阅读0次

    之前的文章大体的介绍了一下AMQP协议以及RabbitMQ对其的抽象,这篇文章详细说一下RabbitMQ中的队列即Queue的知识点。

    关于Queue名称最长?RabbitMQ规定,队列的名字最长不超过UTF-8编码的255字节。不过一般没人无聊到声明名字那么长的队列吧。。。

    关于Queue名称雷区?由于RabbitMQ内部的Queue命名规则采用 "amq."形式,所以当我们声明自己的Queue时,注意不要与此规则冲突,否则会报异常。

    关于队列属性?Durable :代表该队列是否持久化至硬盘(若要使队列中消息不丢失,同时也需要将消息声明为持久化);Exclusive :是否声明该队列是否为连接独占,若为独占,连接关闭后队列即被删除;Auto-delete:若没有消费者订阅该队列,队列将被删除;Arguments:可选map类型参数,可以指定队列长度,消息生存时间,镜相设置等

    声明了一个已经存在的队列?如果队列已经存在,再次声明将不会起作用。若原始队列参数和该次声明时不同则会报异常。

    队列中消息顺序?默认情况下是FIFO,即先进先出,同时也支持发送消息时指定消息的优先级。

    队列消息存放位置?对于临时消息,RabbitMQ尽量将其存放在内存,当出现内存告警时,MQ会将消息持久化至硬盘。对于持久化消息与Lazy-queues,MQ会先将消息存入硬盘,消费时再取出。

    队列中消息的消费?默认情况下,MQ会设置消费者的消费确认模式为自动。对于一些重要消息的处理,推荐确认模式改为手动。(nack和reject区别?nack可以一次拒绝多条消息)

    队列中消息的消费速度?通过Prefetch(通道上最大未确认投递数量)设置消费者每次消费的条数,一般将该值设为1,但他会降低吞吐量。RabbitMQ官网建议的是100-300.(更建议反复试验得到一个表现符合期望的值)

    队列中消息状态?队列中的消息共有俩种状态,一是准备投递,二是已投递但未确认。

    队列最大长度? 声明队列时可以指定最大长度,需要注意的是只限制状态为准备投递的数量,未确认的消息不计算在内。当队列长度超过限制,MQ会根据策略选择丢弃(默认)或者将消息投递进死信队列。

    关于死信队列?其实更准确的说法是死信交换机,提前声明一个交换机,在声明队列时使用“x-dead-letter-exchange”参数(可指定routKey)将队列绑定到该死信交换机。消息有以下情况之一会成为死信:被reject或者nack,消息超过生存时间,队列长度超过限制。

    关于不能路由到队列的消息?这个和上面一样,其实不算Queue系列而是Exchange。针对消息无法路由到队列的情况MQ提供了Alternate Exchange处理。声明Exchange时添加args.put("alternate-exchange","my-ae")参数。即当该交换机存在无法路由的消息时,它将消息发布到AE上,AE把消息路由到绑定在他上面的消息。

    相关文章

      网友评论

        本文标题:RabbitMQ之Queue介绍

        本文链接:https://www.haomeiwen.com/subject/uhuyuftx.html