知识卡片
RabbitMQ并不天然保证消息顺序
内容
消息顺序性——消费顺序与发布顺序一致——只在单生产者、单消费者、无任何补偿重发和高级特性介入的理想情况下才成立,这是一个常被误解的假设。事务/publisher confirm失败后的补偿重发、不同TTL组成的延迟队列、优先级队列、以及多消费者场景下某条消息被拒绝重新入队后落到了另一个消费者手上,都会打破顺序。发散:顺序性不是消息中间件的默认承诺,而是需要业务方主动争取的属性——比如在消息体里加全局递增的序列号,由消费端自己重排,把”顺序保证”从基础设施职责下放为应用层职责。
参考来源
《RabbitMQ实战指南》第4章《RabbitMQ进阶》