如果一个消费者在尚未发送确认回执的情况下挂掉了,那么AMQP代理会将消息重新投递给另一个消费者。如果当时没有可用的消费者了,消息代理会死等下一个注册到此队列的消费者,然后再次尝试投递。
2.拒绝消息当一个消费者在收到消息后,由于某种原因导致消息处理失败,消费者可以告诉消息代理拒绝消息,并指明如何处理这条消息——销毁它或者重新放入队列中。
3.预取消息在多个消费者共享一个队列的时候,可能会出现有的消费者处理很多消息,而有的消费者没有消息可处理。此时可以指定在收到下一个确认回执前,消费者一次可以接受的最大消息数。
六、消息属性和有效载荷AMQP模型中的消息对象是带有属性的。有些属性及其常见,AMQP中也明确定义了它们,并且开发者们无需费心思思考这些属性名字所代表的具体含义。例如:
Content type(内容类型)
Content encoding(内容编码)
Routing key(路由键)
Delivery mode (persistent or not)
投递模式(持久化 或 非持久化)
Message priority(消息优先权)
Message publishing timestamp(消息发布的时间戳)
Expiration period(消息有效期)
Publisher application id(发布应用的ID)
有些属性是被AMQP代理所使用的,但是大多数是开放给接收它们的应用解释器用的。有些属性是可选的也被称作消息头(headers。他们跟HTTP协议的X-Headers很相似。消息属性需要在消息被发布的时候定义。
消息能够以持久化的方式发布,AMQP代理会将此消息存储在磁盘上。如果服务器重启,系统会确认收到的持久化消息未丢失。简单地将消息发送给一个持久化的交换机或者路由给一个持久化的队列,并不会使得此消息具有持久化性质:它完全取决与消息本身的持久模式(persistence mode)。将消息以持久化方式发布时,会对性能造成一定的影响(就像数据库操作一样,健壮性的存在必定造成一些性能牺牲)。
参考资料:
https://blog.csdn.net/mx472756841/article/details/50815895
https://blog.csdn.net/whoamiyang/article/details/54954780
https://www.cnblogs.com/frankyou/p/5283539.html