RabbitMQ的消息路由基本讲解

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)是A_routingKey,queueB在exchangeA上的绑定规则(binding)是B_routingKey。

3.3 注册消费者:消费者A注册时声明我对queueA和queueB内的消息感兴趣,消费者B注册时声明我只对queueB内的消息感兴趣。

例1:生产者A生产一条消息后将该条消息发送到exchangeA的交换机上,并声明该条消息的路由键为B_routingKey,然后交换机exchangeA会解析该消息的路由键B_routingKey,解析完发现该routingKey和queueB绑定时声明的binding匹配成功,就将该消息发送到queueB的队列内。对queueA的队列的binding并不匹配A_routingKey != B_routingKey,所以queueA并不会收到该消息,但是对于两个消费者而言,它们都监听了queueB队列,所以都会收到queueB给它们推送的该条消息。

例2:生产者A又生产了一条消息,并将该条消息发送到exchangeA的交换机上,且声明该条消息的路由键为A_routingKey,这时exchangeA解析路由键A_routingKey后会将该消息发送给queueA队列,因为和queueB队列的binding规则并不匹配,所以该消息不是queueB感兴趣的消息。queueA收到exchangeA给它发送的消息后会将该消息推送给监听它的消费者A,消费者B并不会收到该条消息,因为消费者B没有监听queueA的消息。

以上就是RabbitMQ基本讲解,下期会附上代码,用案例更详细的说明。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值