老话说得好,有得必有失;那么我们为了方便使用了消息中间件,享受了其中的优点,那必然要承受其中的缺点
那么使用消息中间件有哪些缺点呢?
- 系统可用性降低
- 系统复杂性提高
- 一致性问题
可用性降低
系统引入的外部依赖越多,不可避免出现的问题越多,越容易宕机。就比如上一篇文章中讲的,本来是ABCD四个系统,后面加了一个消息中间件,如果中间件挂掉了,那整个系统不就崩溃了吗,那我们不得卷铺盖卷走人了
复杂性提高
还是那句话,本来是ABCD四个系统运行的好好的,为了解耦异步之类的加了消息中间件,那如果消息重复了怎么办?消息丢失了怎么办?怎么保证传递消息的顺序?等等一系列的问题都要考虑
一致性问题
这个就是异步出现的问题,这边A系统给用户返回了成功结果,但是后面异步处理的时候D系统失败了怎么办。这不就造成消息的不一致了吗。
所以消息队列是一种非常复杂的架构,用了之后确实会带来一系列的好处,会发现程序的性能提高了,耗时变短了,耦合降低了;但是维护的时候你会发现复杂性上升了一个量级。但是呢,还是得用,不能因噎废食对不对。