RabbitMQ笔记-Exchange、Queue、Message详细说明

Queue(队列):

Queue参数

  • durable:是否持久化, 队列默认是存放到内存中的,rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重启之后会读取该数据库
  • exclusive:是否排外的,队列在当前connection下的channel中是共享的,其他connection下的channel访问不到,当connection关闭时队列删除
  • autoDelete:是否自动删除,当最后一个消费者断开连接之后队列是否自动被删除,可以通过RabbitMQ Management,查看某个队列的消费者数量,当consumers = 0时队列就会自动删除
  • Arguments:队列其他参数,Dictionary类型

Arguments字典:

  • x-message-ttl #消息过期时间,message在队列的最大存活时间,单位毫秒。设置后队列Features属性显示TTL
  • x-expires #可以设置一个延迟时间,如启动一个生产者或启动一个消费者,消费者运行结束后10秒,队列会被删除
  • x-max-length #队列最大长度
  • x-max-length-bytes #指定队列最大内存
  • x-dead-letter-exchange #指定死信交换机
  • x-dead-letter-routing-key #指定死信routingKey
  • x-max-priority #设置优先级,优先级高的先发送consumer
  • x-queue-mode #lazy:lazy queue的信息尽可能的都保存在磁盘上,仅在消费者请求的时候才会加载到RAM中

控制台队列属性:

  • Features属性:
    D:持久化
    TTL:设置了消息过期时间
    DLX、DLK:表示设置给队列设置了死信交换机和死信消息的routing key
  • Ready:消息的状态,等待投递的消息
  • Unacked:消息的状态,已投递给消费者,但是还没收到消费者确认信号的消息。如果RabbitMQ一直没有收到消费者的确认信号,并且消费此消息的消费者已经断开连接,则RabbitMQ会安排该消息重新进入队列,等待投递给下一个消费者

注意:

  • RabbitMQ 不允许你绑定一个非坚固(non-durable)的交换机和一个durable的队列。反之亦然。要想成功必须队列和交换机都是durable的。
  • 一旦创建了队列和交换机,就不能修改其标志了。例如,如果创建了一个non-durable的队列,然后想把它改变成durable的,唯一的办法就是删除这个队列然后重现创建。因此,最好仔细检查创建的标志。
  • 队列、交换机可以持久化,绑定不能设置持久化,如果你绑定了一个durable的队列和一个durable的交换机,RabbitMQ会自动持久化这个绑定。
  • Unacked消息怎么处理:未ack的消息状态会变为Unacked,客户端断开连接后,状态会变为Ready
  • 建议使用长连接,长连接的基础之上使用多个channel
原文地址:https://www.cnblogs.com/fanfan-90/p/13358203.html