如何理解消息队列
消息队列的出现是在PRC的基础之上,当多个系统调用复杂的情况下,有人就这样去想了,能不能做一个中转站(本质也是一个PRC系统)单独用来传递信息,其他系统通过这个中转站来进行收发消息呢?
消息队列的本质应该是两个PRC调用和一个信息存储。消费者调用接口向队列发送消息,消息队列将消息存储下来,然后向订阅了的消费者发送该消息。
消息模型
1. 点对点
消息生产者向消息队列发送一条消息,只能被一个消费者消费一次
2. 发布/订阅
消息生产者向消息队列中的主题发送消息,多个消费者可以在消息队列中订阅该主题。不同类型的消费者可以多次消费消息。
使用场景
1. 异步处理
消息队列具有很好的削峰作用的功能,通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。
2. 应用解耦
消息队列使利用发布-订阅模式工作,消息发送者(生产者)发布消息,一个或多个消息接受者(消费者)订阅消息。这样消费者和生产者就没有直接耦合,如果模块之间不直接进行调用,模块之间耦合度就会很低,那么修改一个模块或者新增一个模块对其它模块的影响会很小,从而实现可扩展性。
通过使用消息队列,一个模块只需要向消息队列中发送消息,其它模块可以选择性地从消息队列中订阅消息从而完成调用。
可能出现的问题
- 系统可用性降低。
- 系统复杂性提高。
- 一致性问题。