Rabbitmq的几种工作模式介绍

前言

上一篇文章对mq做了简介,并且说了rabbitmq的六种模式,这篇文章主要记录一下这几种模式是什么样的,以及怎么用的。第一种不再说,跟简单。
一下几种模式均有对应的案列代码供参考,请看https://github.com/Coderxiangyang/Rabbitmq/tree/master/rabbitmq-01-hello

work queues模式

这种模式和hello world模式差不多,只不过是多个消费端,主要是应对消息太多,处理不过来的情况。多个消费端可以共同消费一个队列中的消息,他们的关系是竞争关系。

发布订阅模式

与work queues模式相比,此模式又多了一个角色。Exchange:交换机,每个消费者监听自己的队列,生产者将消息发给 broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收 到消息,此方法也成为交换机的广播类型。所以记住这个模式的特殊点就是 新增交换机,交换机会把消息广播到与其绑定的所有队列

交换机的几种类型
  1. Fanout:广播,将消息交给所有绑定到交换机的队列 (发布订阅模式)
  2. Direct:定向,把消息交给符合指定 routing key 的队列
  3. Topic:通配符,把消息交给符合 routing pattern 的队列(路由模式)

Exchange (交换机)只负责转发消息,不具备存储消息的能力,如果没有任何队列与 Exchange 绑定,或者没有符合路由队列,那么消息会丢失!

声明交换机的时候,去指定交换机是什么类型的、
在这里插入图片描述
可以在rabbitmq图形化界面查看当前exchange绑定的队列
在这里插入图片描述

Routing 路由模式

路由模式和上面的发布订阅模式不太一样,应该说数据的传输更加严格,一个交换机绑定多个队列,每一个队列有route key,在绑定是,key也需要绑定,发送消息时,也要指定将此消息发送到那个route key,也就是说,此消息发出去,只有一个队列可以消费,其他队列消费不了。
如图:一个交换机绑定了两个队列。在这里插入图片描述
生产者发送了两条消息
在这里插入图片描述
两个消费者分别消费一条消息,谁也代替不了谁。
在这里插入图片描述
在这里插入图片描述

Topics 通配符模式

上面的路由模式,有点死板,一个生产者只能跟一个队列对应,Topics 通配符模式跟上面的不同是,可以通过通配符的方式,指定这个exchange中的消息由哪些队列消费。
Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert

 #:匹配一个或多个词
* :匹配不多不少恰好 1 个词

举例:
item.# :能够匹配 item.insert.abc 或者 item.insert,即item开头,后面带一个或者多个单词都可以
item. :只能匹配 item.insert或者是item.update,即item开头,后面带一个单词

或者是:
#.item:以item结尾的toute key 都可以匹配
*.item:以item结尾,前面有一个词的,都可以匹配

例如:生产者是这样发送消息的,四条消息。
在这里插入图片描述
队列是这样绑定的
在这里插入图片描述
启动消费者代码:结果是这样的
在这里插入图片描述
就是说*只适配了route key为item.insert和item.update的通道。

总结

  1. 简单模式 HelloWorld 一个生产者,一个消费者,不需要设置交换机
  2. 工作队列模式 Work Queue 一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)
  3. 发布订阅模式 Publish/subscribe 需要设置类型为 fanout 的交换机,生产者生产消息,然后通过广播的方式。与交换机绑定的队列都可以消费消息
  4. 路由模式 Routing 需要设置类型为 direct 的交换机,交换机与队列绑定,并且指定route key,生产者生产消息,对饮toute key的队列消费消息
  5. 通配符模式 Topic 需要设置类型为 topic 的交换机,交换机和队列进行绑定,并且指定通配符方式的 routing key,生产者生产消息,交换机通过 routing key及其通配符,发送到对应的队列中,然后消费消息。

有些情况下,交换机可不绑定队列,如topic模式下,手动建立也可以,生产者根据已经存在的route key去发送对应消息到队列中,但是如果不手动建立的话,也不在代码中绑定交换机和队列的关系的话,代码启动就会报错。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值