任何技术都是一把双刃剑,在引入消息队列的同时必定也会伴随着相应的问题,正如《人月神话》中所说,没有银弹。
消息队列的引入会带来3个核心的问题:
- 系统可靠性降低
在引入MQ时,MQ作为了中间层,这就使得模块与对应的MQ是紧耦合的关系。一旦MQ宕机,下游服务即使正常运行,但整个系统却无法使用。这个问题的解决方式是 MQ的高可用,使得MQ高可用,不会那么容易宕机达到5个9。
- 系统复杂度提高
引入MQ,需要考虑的问题变复杂,随之而来的问题是- 消息丢了怎么办
- 重复消费消息问题
- 消息的顺序问题
这几个问题都有对应的解决方案。
- 处理结果的最终一致性问题
引入MQ会导致处理结果的最终一致性问题,因为模块A与其他模块之间解耦,从而模块A不知道其他模块的处理结果
这就导致模块A以为处理结果OK,但实际上可能模块B处理结果失败,这也是异步化所带来的最终一致性问题。
为您推荐与 消息队列 相关的帖子:
暂无回复。