消息队列概述
消息队列概述
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题。是大型分布式系统不可缺少的中间件。
消息队列应用场景
1.应用解耦
传统模式:
系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码。
中间件模式:
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
2.异步处理
传统模式:
一些非必要的业务逻辑以同步的方式运行,太耗费时间。
中间件模式:
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。
3.限流削峰
传统模式:
并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。
中间件模式:
系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。
4.消息队列的缺点
系统可用性降低
在原有系统中引入消息队列增加了故障的机率,降低了系统的可用性。系统复杂性增加
引入消息队列后需要考虑更多的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。因此系统复杂性增大。
消息队列的工作模式
消息队列包括两种模式,点对点模式(point to point)和发布/订阅模式(pub/sub)。
1.点对点模式
点对点模式包括以下三个角色:
- 消息队列(queue)
- 发送者(producer)
- 接收者(consumer)
每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。
点对点模式特点:
- 每条消息只有一个消费者。
- 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。
- 接收者在成功接收消息之后需向队列应答成功。
应用场景:
- 单消费者,希望发送的每个消息都应该被成功处理。
2.发布/订阅模式
发布/订阅模式下包括三个角色:
- 主题(topic)
- 发送者(publisher)
- 接收者(subscriber)
发布者将消息发送到Topic,消息队列将这些消息传递给多个订阅者。
发布/订阅模式的特点:
- 每条消息只属于一个发布者,但可以有多个订阅者。
- 一个Topic可以支持多个发布者同时发布消息。
- 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅之后,才能消费发布者的消息,而且,为了消费消息,订阅者必须保持运行的状态。当然现在支持消息持久化的消息队列对这种事件的相关性有所缓和。
适用场景:
- 希望发送的消息可以不被做任何处理、或者被一个消费者处理、或者可以被多个消费者处理。
参考资料
- 消息队列及常见消息队列介绍
https://cloud.tencent.com/developer/article/1006035 - 分布式之消息队列复习精讲
https://www.cnblogs.com/rjzheng/p/8994962.html