如果RabbitMQ broker有一个具有多个队列绑定的扇出交换,其中队列是持久的,并且传递给交换的消息是持久的/持久的,那么每个队列是否会为消息存储一个单独的副本,或者代理可能会发现并优化排队消息持久性,而不是在扇出中多次存储每个队列的有效负载,而是存储类似于消息链接/引用之类的内容?
发布于 2016-04-01 20:37:23
这取决于消息的大小。对于持久性,每个接收消息的持久队列都有一个引用该消息的队列索引。较大的消息(默认情况下为>= 4K )将被写入消息存储区并由队列索引引用。因此,绑定到扇出交换的每个队列都有消息的队列索引,但消息存储中只有一个消息有效负载副本。
较小的消息将完全存储在队列索引中,消息存储区中没有条目。如果您的扇出交换接收到一条小消息,那么每个绑定队列都将拥有它自己的整个消息副本。
RabbitMQ消息持久性的一个很好的解释可以在https://www.rabbitmq.com/persistence-conf.html上找到。
https://stackoverflow.com/questions/36334049
复制相似问题