RabbitMQ的消息传输保障三个层级?

消息可靠传输一般是业务系统接入消息中间件时候首要考虑的问题,一般消息中间件的消息传输保障分为三个层级;

At most once: 最多一次,消息可能会丢失,但是绝不会重复传输;
At least once:最少一次,消息绝不会丢失,但可能会重复传输;
Exactly once:恰好一次,每条消息肯定会被传输一次且仅传输一次;

RabbitMQ 仅支持1,和 2,对于3,只暂时不支持的,一般就是用第二种,最少一次,消息觉不会丢失,然后对于重复的消息

RabbitMQ也暂时没有去重机制来确保恰好一次传输,只能是在客户端实现,比如引入GUID(Globally Unique Identifier)的概念;

针对GUID,如果从客户端角度去重,那么需要引入集中式缓存,必然增加依赖复杂度,另外缓存的大小也难以界定;

建议在实际的生产环境中,业务方根据自身的业务特性进行去重,比如业务消息本身具有幂等性,或者借助Redis等其他工具去重;

发表评论

后才能评论