rabbitmq怎么获取消息队列元数据 rabbitmq获取指定消息_持久化


一、队列

1)消费消息

  • 通过AMQP的basic.consume命令订阅。
  • 通过AMQP的basic.get从队列获取单条消息。
  • 队列有多个消费者,则会采取循环(round-robin)的方式发给消费者。
  • 消息必须确认:可以是通过AMQP的basic.ack显式确认或者订阅队列时设置auto_ack为true。
  • 拒绝消息:可以通过AMQP的basic.reject消息或者消费者从RabbitMQ服务器断开连接。reject的话存在两种情况,requeue设置为true,则发送给下个消费者,false则从队列移除。

2)队列创建

  • queue.declare创建队列。
  • exclusive:true私有队列。
  • auto-delete:最后一个消费者取消订阅,则会自动删除。
  • passive:true存在队列,则直接返回,false存在队列则异常。

 


二、交换器与绑定


        交换器可使用exchange.declare创建。


  • direct:路由key匹配。
  • fanout:发给绑定该交换机的所所有队列。
  • topic:模糊匹配,允许不同key的消息进入相同队列。
  • headers:匹配AMQP消息的header而非路由key,与direct一致。

 


三、虚拟主机与隔离


        vhost:实现队列、交换器的隔离,并且有独立的权限。


 


四、消息持久化

1)持久化条件

  • 消息投递模式必须为持久(delivery mode 为2)
  • 发送到持久化交换器(durable为true)非持久化的话,不会写到日志文件。
  • 到达持久化队列(durable为true)非持久话的话,到达队列将从持久化日志移除。

2)AMQP事务


        发送方确认模式:设置信道为confirm模式,所有在信道上发布的消息都会被指派一个唯一的ID,一旦消息被投递到匹配的队列后,信道会发送一个发送方确认模式给生产者引用程序,内包含消息ID。如果消息和队列是持久化的,确认消息会在写入磁盘后才发出。确认是异步的。 


 


五、消息的整个过程


发送消息:连接到RabbitMQ—>获取信道—>声明交换器—>创建消息—>发布消息—>关闭信道—>关闭连接


消费消息:连接到RabbitMQ—>获取信道—>声明交换器—>声明队列—>绑定交换器与队列—>消费消息—>关闭信道—>关闭连接