RabbitMq之路由键
前言#
使用场景:#
我们希望接收端指定接收某个队列的消息的时候,此时为直连交换类型
原理:#
每个接收端在绑定交换机的时候可以设置相应路由键,每个发送端在发送消息的时候可以指明路由键,交换机可以根据路由键将数据发送到指定的队列中,这样接收端就能从指定的队列获取到相应的数据
代码#
send
import pika hostname = '127.0.0.1' parameters = pika.ConnectionParameters(hostname) connection = pika.BlockingConnection(parameters) # 创建通道 channel = connection.channel() # 定义交换机,设置类型为direct channel.exchange_declare(exchange='change_dir', exchange_type='direct') # 定义三个路由键 routings = ['info', 'warning', 'error'] # 将消息依次发送到交换机,并设置路由键 for routing in routings: message = '%s message.' % routing channel.basic_publish(exchange='change_dir', routing_key=routing, body=message) print(message) connection.close()
receive
import sys, pika hostname = '127.0.0.1' parameters = pika.ConnectionParameters(hostname) connection = pika.BlockingConnection(parameters) # 创建通道 channel = connection.channel() # 定义交换机,设置类型为direct channel.exchange_declare(exchange='change_dir', exchange_type='direct') # 从命令行获取路由键参数,如果没有,则设置为info routings = sys.argv[1:] if not routings: routings = ['info'] # 生成临时队列, result = channel.queue_declare(queue='change_dir', exclusive=True) # exclusive=True 当接收端退出的时候 会销毁那个临时创建的队列 queue_name = result.method.queue print(queue_name) for routing in routings: # 绑定到交换机上,设置路由键 channel.queue_bind(exchange='change_dir', queue=queue_name, routing_key=routing) def callback(ch, method, properties, body): print(" [x] Received %r" % (body,)) channel.basic_consume( queue='change_dir', # 指定队列名 on_message_callback=callback, # 从队列里获取消息 auto_ack=False # mq服务器挂掉 防止任务丢失 ) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming()
演示
开启一个发送端一个接收端并且让发送端发送数据
接收端
发送者发送了三个数据 但是其只能接收一个数据 属于自己路由匹配的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!