中间件系列六 RabbitMQ之Topic exchange 用法

本文介绍了RabbitMQ中的Topic Exchange,用于实现更灵活的消息路由,支持路由键的模糊匹配。通过使用Topic Exchange,可以指定类型为a的消息仅被队列A接收,类型为b的消息被队列B和C接收。文中提供了生产者和接收者的代码示例,以及测试用例,展示了如何配置路由键以实现特定的消息传递策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

上篇文章中间件系列五 RabbitMQ之Direct exchange(直连交换机)和路由,我们通过direct exchange(直连交换机)可以根据路由键进行路由,但是还是不够灵活,它只能进行完全匹配。这节我们引入Topic exchange(主题交换机),支持对路由键的模糊匹配
上篇文章实现生产者发送一个消息,这个消息同时被传送给所有队列。但是有时我们不希望所有的消息都被所有队列接收,我们希望可以指定类型为a的消息只能被队列A接收,类型为b的消息只能被队列B,C接收。扇型交换机只能无脑地广播消息给所有的消费者,实质是广播给所有关联的队列。
为了实现这个功能,一种是建立多个交换机,这种方式简单暴力但是不灵活。本节我们介绍使用单个直连交换机+路由实现以上功能

2. 本文实现功能说明

这里写图片描述

上图中有3个绑定

队列Q1绑定键值"*.orange.*"
队列Q2绑定键值"*.*.rabbit", "lazy.#"

案例说明

1. 路由键"quick.orange.rabbit"和"lazy.orange.elephant"会被同时投递到Q1和Q2
2. 路由键"quick.orange.fox" 只被同时投递到Q1
3. 路由键"lazy.brown.fox" 只被投递到Q2
4. 路由键"lazy.pink.rabbit" 只会被投递到Q2,且只投递一次,尽管它同时符合两个键的值"*.*.rabbit", lazy.#"。
5. 路由键"quick.brown.fox"、"orange" 、 "quick.orange.male.rabbit" 没有符合两个队列的要求,被丢弃

路由键中特殊匹配字符说明

  • *(星号)可以代替一个字。
  • #(散列)可以代替零个或多个单词。

Topic Exchange的路由键条件:

  1. 必须是由英文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值