RabbitMQ (三) 消息订阅模式

一、广播模式(fanout)

  • 交换机(Exchange)收到的消息发送给所有绑定了该交换机的队列,忽略路由(RoutingKey)
  • 这种模式下,消息会被所有消费者消费。也就是说,只要是"绑定"到某个交换机的队列,都会收到生产者发送到该交换机的消息

二、路由模式(direct)

  • 生产者发送信息时,需要指定一个路由(RoutingKey)交换机(Exchange)会根据路由将消息发送到绑定了此路由的队列中

三、主题模式(topic)

  • 在实际的运用中,广播模式(fanout)路由模式(direct)虽然功能能支持一定场景,但是任然有一定的局限性,比如不能根据多重条件来进行路由选择
  • 发送给主题模式交换机的信息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符,标识符可以随意填充,但是一般是与某些特征相关联。
  • 选择键不能超过255个字符。合法的键比如"vip.user.order",“common.user.pay”。
    绑定键必须以相同的格式,特殊情况:"*" (星号)可以代替任意一个标识符;"#"(井号)可以代替0个或多个标识符。

队列1绑定"*.user.*",表示其只关注用户相关的消息。

队列2绑定"*.*.order",表示其只关注订单相关的消息。

队列3绑定"svip.#",表示其只关注svip用户相关的消息。

当发送消息指定"vip.user.order"时,因为队列1与队列2能匹配,所以会被发送到队列1、2中。

如果发送信息为"common.user.pay"时,就只有队列1能匹配,且将消息发送到队列1。

但是如果我们违反约定,发送了只带1个或者4个表示符的选择键,那交换机将会怎样去处理呢?

当发送消息选择键为"test"时,所有队列都选择键因为不满足自己的匹配规则而不接受,此时消息丢弃。

当发送消息选择键为"test.test1.test2.order"时,尽管有四个标识符,但是能被队列2的规则匹配。

  • 主题模式的转发器非常强大,可以实现广播模式(fanout)路由模式(direct)的功能。当队列绑定#选择键时,相当于广播模式(fanout)。当特殊字符#和*不包含在选择键中时,就相当于路由模式(direct)模式。
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值