大家好!今天咱们来聊聊消息队列。我们之前讲过为什么要引入消息队列,也提到了它的一些优点,比如削峰、异步处理等。但大家要知道,消息队列是一把双刃剑,在应用它的时候,可能会伴随着各种各样的问题。
首先是复杂性问题。系统原本可能运行良好,可引入消息队列后,诸如怎么处理消息丢失的情况、怎么保证消息传递的顺序性等一大堆问题就来了。引入消息队列的工作可能只占 10%的工作量,但处理这些问题带来的复杂度可能要翻倍。
再来说说可用性。系统引入的外部依赖越多,就越容易出问题。像通过线程异步处理能实现日志收集、积分奖励等,但引入消息队列这个中间件后,万一它挂掉,整个相关模块可能都得瘫痪。用户收不到短信、积分奖励,更严重的像付款客户的订单处理,如果中间的消息队列挂掉,可能就会出现只收款不发货的尴尬情况。
还有一致性的问题。比如处理订单数据,要同步到 3 个系统中告知订单已支付成功,正常情况下可能没事,但要是出现消息丢失、消息队列异常长时间得不到响应,就可能出问题。
总之,使用消息队列时,我们得花费大量时间来处理它带来的这些问题。大家在实际应用中,肯定也遇到过类似的情况,所以一定要谨慎应对!