RabbitMQ的消息路由基本讲解

日期:2017-06-17       浏览:805

RabbitMQ是AMQP(高级消息队列协议)协议的一种实现,RabbitMQ的基本讲解也就是围绕着AMQP协议的讲解。

一角色讲解

1.1 消息代理(message brokers): 大家可以理解为RabbitMQ 服务器,起到了消息接收,持久化和转发等作用。
1.2 发布者(publishers)或生产者(producers): 消息的产生来源,具有生产消息的角色。
1.3 消费者(consumers): 消息的接收者,消费消息的角色。
1.4 交换机(exchange): 用于接收生产者生产的消息,并按照一定的路由规则将消息转发到匹配的队列。
1.5 消息队列(queue): 根据指定的绑定规则来接受交换机内自身感兴趣的的消息。
1.6 绑定(binding): 将消息队列和交换机绑定在一起,绑定时指明队列匹配消息的匹配规则(可以理解为队列的兴趣爱好)。
1.7 路由键(routingKey): 生产者发送到交换机内的消息需要带上自己的路由键,交换机根据消息的路由键去和队列绑定时声明的binding匹配。

二 各个角色之间如何配合

2.1 生产者生产完消息后会将消息发送给指定的交换机(exchange),并声明该条消息的 routingKey(路由键)。
2.2 因为同一个交换机可以被多个队列绑定(同一个队列也可以绑定多个交换机),并且每个队列绑定到交换机上时都声明了自己的匹配规则(兴趣爱好),所以交换机(exchange)收到生产者发来的消息后会解析该条消息的 routingKey(路由键),看该条消息的 routingKey 是哪个队列感兴趣的,匹配成果后就将该条消息发送到相应队列内。
2.3 消费者声明自己监听的队列,一个消费者可以监听多个不同队列(一个队列也可以被多个消费者监听),当监听的队列内有消息时,队列会将该条消息推送给监听该队列的所有消费者。

三 图文示例

消息的大致生命周期
消息的大致生命周期
假设现在有一名生产者A和两名消费者A 和B ,它们都需要到消息代理(RabbitMQ server)上进行注册。
3.1 注册生产者: 生产者A注册时声明说我生产的消息会发布到名为exchangeA的交换机上。
3.2 创建队列: 创建队列queueA和queueB,并指定queueA在exchangeA上的绑定规则(binding)是AroutingKey,queueB在exchangeA上的绑定规则(binding)是BroutingKey。
3.3 注册消费者: 消费者A注册时声明我对queueA和queueB内的消息感兴趣,消费者B注册时声明我只对queueB内的消息感兴趣。
例1: 生产者A生产一条消息后将该条消息发送到exchangeA的交换机上,并声明该条消息的路由键为BroutingKey,然后交换机exchangeA会解析该消息的路由键BroutingKey,解析完发现该routingKey和queueB绑定时声明的binding匹配成功,就将该消息发送到queueB的队列内。对queueA的队列的binding并不匹配AroutingKey != BroutingKey,所以queueA并不会收到该消息,但是对于两个消费者而言,它们都监听了queueB队列,所以都会收到queueB给它们推送的该条消息。
例2: 生产者A又生产了一条消息,并将该条消息发送到exchangeA的交换机上,且声明该条消息的路由键为AroutingKey,这时exchangeA解析路由键AroutingKey后会将该消息发送给queueA队列,因为和queueB队列的binding规则并不匹配,所以该消息不是queueB感兴趣的消息。queueA收到exchangeA给它发送的消息后会将该消息推送给监听它的消费者A,消费者B并不会收到该条消息,因为消费者B没有监听queueA的消息。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录