AMQP基本概念
AMQP(RabbitMQ)必须由三部分:交换器、队列和绑定
-
消息(Message):由有效载荷和标签组成。其中有效载荷即为传输的数据。
-
生产者(Producer):创建消息,发布到代理服务器(MessagerBroker)。
-
代理服务器(MessageBroker):接收和发布消息的应用,RabbitMQServer就是消息代理服务器,其中概念包括很多。比如在RabbitMQ中包含:信道(channel)、队列(queue)、交换器(exchange)、路由键(routing
key)、绑定(binding key)等。子概念
- 信道(channel):应用程序(生产与/或消费)和大力服务器之间TCP连接内的虚拟连接,解决TCP连接数量,限制以及降低TCP连接代价。每个信道有一个ID,其概念与“频发多路复用”类似。
- 队列(queue):消息最终到达队列中,等待消费者消费。使用“basic.consume”订阅可获得队列全部消息,“basic.get”订阅只能获得队列的一条消息(如果队列中存在消息)。如果无人订阅,消息将在队列中存储,等待订阅;如果多个消费者同时订阅该队列,消息将以自动轮询(round-robin)方式发送给消费者(Fanout Exchange,每个消费者只能获得队列中消息的子集)
- 交换器(exchange):消息到达代理服务器的第一站,根据分发规则,匹配查询表中的(routing key)路由键(Fanout Exchange除外),分发消息到队列(queue)中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。
- 路由键(routing key):消息发送给交换器时,消息将拥有一个路由键(默认为空),交换器根据这个路由键将消息发送到匹配的队列中。
- 绑定键(binding key):队列需要通过绑定键(默认为空)绑定到交换器上,交换器将消息的路由键与绑定队列的
绑定建
进行匹配,正确匹配的消息将发送到队列中。路由键是偏向生产的概念,而绑定键是偏向消费的概念。
消费者(consumer):连接到代理服务器,并订阅到队列(queue)上,代理服务器将发送给一个订阅的/监听的消费者,消费者只能接受消息的一部分:有效载荷(playload)!
AMQP中的消息路由
AMQP中消息的路由过程和JMS存在一些差别,AMQP中增加了Exchange和Binding角色。生产者发布消息到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到哪个队列。
Exchange 类型分类
常用三种分发策略:direct、fanout、topic
-
直连型-direct
单播模式
路由键如果和Biding中的键完全一致,则转发消息到对应队列。
比如路由键为 emp 则不会转发其它的:比如emp.id或emp.salary等。
-
扇出型-fanout
广播模式
不会处理路由键,而是消息转发给所有绑定的队列。
-
话题型-topic
匹配广播
处理路由键和binding中的键时,采用模糊匹配方式,来决定转发到哪个消息队列。
#匹配0个或多个单词
*匹配一个单词