“消息队列的流派”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (建立内容为“=== 什么是 MQ === MessageQueue(MQ),消息队列中间件。 很多人都说:MQ通过将消息的发送和接收分离来实现应用程序的异步和解…”的新页面) |
Jihongchang(讨论 | 贡献) |
||
第17行: | 第17行: | ||
它定义了两个对象一一发送数据的叫生产者;接收数据的叫消费者,提供一个SDK让我们可以定义自己的生产者和消费者实现消息通讯而无视底层通讯协议 | 它定义了两个对象一一发送数据的叫生产者;接收数据的叫消费者,提供一个SDK让我们可以定义自己的生产者和消费者实现消息通讯而无视底层通讯协议 | ||
+ | |||
+ | === 有 Broker 的 MQ === | ||
+ | 这个流派通常有一台务器作为 Broker,所有的的息都过它中转。 | ||
+ | |||
+ | 生产者把消息发送给它就结束自己的任务了,Broker 则把消息主动推送给消费者(或者消者主动轮询) | ||
+ | |||
+ | |||
+ | 重 |
2022年8月15日 (一) 04:03的版本
什么是 MQ
MessageQueue(MQ),消息队列中间件。
很多人都说:MQ通过将消息的发送和接收分离来实现应用程序的异步和解偶,这个给人的直觉是一一MQ是异步的,用来解耦的,但是这个只是MQ的效果而不是目的。
MQ真正的目的是为了通讯,屏蔽底层复杂的通讯协议,定义了一套应用层的、更加简单的通讯协议。
一个分布式系统中两个模块之间通讯要么是HTTP,要么是自己开发的(rpc)TCP,但是这两种协议其实都是原始的协议。
HTTP 协议很难实现两端通讯一一模块A可以调用B,B也可以主动调用A,如果要做到这个两端都要背上 WebServer ,而且还不支持长连接(HTTP2,0的库根本找不到)。
TCP 就更加原始了,粘包、心跳、私有的协议,想一想头皮就发麻。
MQ 所要做的就是在这些协议之上构建一个简单的"协议''一一生产者/消费者模型。
MQ 带来“协议”不是具体的通讯协议,而是更高层次通讯模型。
它定义了两个对象一一发送数据的叫生产者;接收数据的叫消费者,提供一个SDK让我们可以定义自己的生产者和消费者实现消息通讯而无视底层通讯协议
有 Broker 的 MQ
这个流派通常有一台务器作为 Broker,所有的的息都过它中转。
生产者把消息发送给它就结束自己的任务了,Broker 则把消息主动推送给消费者(或者消者主动轮询)
重