RabbitMq之路由键模糊匹配

前言#

路由键模糊匹配#

就是可以使用正则表达式,和常用的正则表示式不同,这里的话“#”表示所有、全部的意思;“*”只匹配到一个词。看完示例就能明白了。

实例的功能大概是这样:#

比如你有个知心好朋友,不管开心、伤心、工作上的还是生活上的事情都可以和她说;还有一些朋友可以分享开心的事情;还有一些朋友,你可以把不开心的事情和她说。

路由键#

routings = [ 'happy.work',  'happy.life' , 'happy.work.teacher',  'sad.work',  'sad.life', 'sad.work.teacher' ]

"#":匹配所有的路由键

"happy.#":匹配  'happy.work',  'happy.life' , 'happy.work.teacher'

"work.#":无匹配

“happy.*”:匹配 'happy.work',  'happy.life'

"*.work":匹配 'happy.work',  'sad.work'

"*.work.#":匹配  'happy.work',  'happy.work.teacher',  'sad.work', 'sad.work.teacher' 

代码#

发送端

复制代码
import pika

hostname = '127.0.0.1'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters)

# 创建通道
channel = connection.channel()
# 定义交换机,设置类型为topic
channel.exchange_declare(exchange='test_queue_topic', exchange_type='topic')

# 定义三个路由键
routings = ['happy.work', 'happy.life', 'sad.work', 'sad.life']

# 将消息依次发送到交换机,并设置路由键
for routing in routings:
    message = '%s message.' % routing
    channel.basic_publish(exchange='test_queue_topic', routing_key=routing, body=message)
    print(message)

connection.close()
复制代码

接受端

复制代码
import sys, pika

hostname = '127.0.0.1'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters)

# 创建通道
channel = connection.channel()
# 定义交换机,设置类型为topic
channel.exchange_declare(exchange='test_queue_topic', exchange_type='topic')

# 从命令行获取路由键参数,如果没有,则设置为info
routings = sys.argv[1:]
if not routings:
    routings = ['info']

# 生成临时队列,
result = channel.queue_declare(queue='test_queue_topic', exclusive=True)  # exclusive=True 当接收端退出的时候 会销毁那个临时创建的队列
queue_name = result.method.queue

for routing in routings:
    # 绑定到交换机上,设置路由键
    channel.queue_bind(exchange='test_queue_topic', queue=queue_name, routing_key=routing)


def callback(ch, method, properties, body):
    print(" [x] Received %r" % (body,))


channel.basic_consume(
    queue='test_queue_topic',  # 指定队列名
    on_message_callback=callback,  # 从队列里获取消息
    auto_ack=False  # mq服务器挂掉 防止任务丢失
)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
复制代码

代码测试

 发送端

 接受端

work

 happy

 所有

 

posted @   SR丶  阅读(1263)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS