RabbitMQ - routing 模式 和 topics 模式

开篇

本文主要讲解 routing 和 topics 两种工作模式,其中 topics 只是在 routing 的基础上增加了一个 routingkey 的正则匹配。接下来会详细介绍。


routing 模式

之前说到的 Publish/Subscribe 是把一个消息发给多个消费者,并且每个消费者接收到的消息是一样的。而这次说到的Routing 模式,则是通过增加一个组件(Bingings),使我们的消费者能订阅到自己感兴趣的消息。

bindings 的作用

Bindings 会将 exchanges 和 queue 联系在一起,queue 通过 bindings 从 exchangs 中订阅自己感兴趣的消息。

Routing Key

Bindings 提供了一个 RoutingKey 参数 channel.queueBind(queueName, EXCHANGE_NAME, routingkey); 其实在上一篇中,也有这个参数, 只不过这个参数是一个空字符串,因为 这个key和 exchange type是息息相关的,fanout 类型的 exchange 的key就是 空字符串。

  • direct exchange

    一个消息 会根据 routing key 来匹配自己应该去哪个队列。

  • Multiple bindings

    direct exchange 也可以实现 fanout exchange 的作用,只要队列绑定相同的 routing key,一个消息同样可以发到多个队列当中

代码

channel.basicPublish(EXCHANGE_NAME, routingkey, null,   message.getBytes());
channel.queueBind(queueName, EXCHANGE_NAME, routingkey);

topic 模式

topic exchange 只是在 routing 的基础上,将routingkey 改成了类似正则匹配, routingkey 由单词 和 点 组成 ,长度限制在 255 byte

例如:lazy.orange.rabbit 或者 quick.orange.fox, 除此之外, 还可以用

  • '*' 代表一个单词
  • '#' 代表 0个 或 多个 单词

例如 :.orange.rabbit, .orange., quick.# 但是如果单词个数不匹配,也是不行的, 比如, lazy.orange.rabbit. 或者 *.orange.rabbit.other 但是 '#' 这样用是可以的, lazy.orange.rabbit.#;

转载于:https://my.oschina.net/u/3984985/blog/3036308

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值