从零了解MQ
有从别的地方复制的介绍,侵删
是什么
代表消息队列,是一种应用程序对应用程序的通信方法;通过消息传递队列发送和接收消息数据,达到两者之间的信息交换。
组成
- Broker
消息服务器,作为server提供消息核心服务 - Producer
消息生产者,业务的发起方,负责生产消息传输给broker, - Consumer
消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理 - Topic
主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播 - Queue
队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收 - Message
消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输
种类
老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。
模式分类
- 多对多
一个或多个publish将一条msg发到一个或多个queue中,一个queue可以有多个consumer监听,但是msg只能被其中一个consumer消费 - Pub/Sub发布订阅(广播)
一个或多个publish将一条msg发给全部queue,可以有多个consumer消费
MQ核心使用场景(优点):
- 应用解耦
- 异步消息
- 流量削峰
耦合、解耦
- 两者有调用关系,就会产生依赖,这就是耦合
- 常见的方法是通过缓冲区来降低相互的依赖性,就是解耦。
同步、异步
- 同步
B一直等待A的处理结果出来之后,才去做接下来要做的事情 - 异步
B在等待A处理的同时,先去做别的事情,直到A通知,B才去接收数据
阻塞、非阻塞
- 阻塞
B主动去监听或询问A是否处理完毕 - 非阻塞
A主动去告诉B自己已经处理完毕
削峰
通过缓冲区存储的方法,来解决瞬间出现大量操作导致系统死机的情况。
MQ缺点:
- 系统可用性降低
如果MQ死掉,将会导致整个系统全部崩溃 - 系统复杂度提高
会出现:消息重复消费、消息丢失、传递消息的顺序错误 等情况 - 一致性问题
有的系统请求成功了,有的失败了,没办法判断和处理 - 效率;
增加了一层MQ,效率有所降低。 - 调试和测试的工作加大。