zoukankan      html  css  js  c++  java
  • python中RabbitMQ的使用(路由键)

    1.简介

    当我们希望每个接收端接收各自希望的消息时,我们可以使用路由键,此时交换机的类型为direct。

    2.工作原理

    每个接收端的消息队列在绑定交换机的时候,可以设定相应的路由键。

    发送端通过交换机发送信息时,可以指明路由键 ,交换机会根据路由键把消息发送到相应的消息队列。

    接收端可以根据路由键获取不同的消息队列。

    3.代码

    send2.py

    import pika
    
    connection=pika.BlockingConnection(pika.ConnectionParameters("localhost"))
    # 创建通道
    channel=connection.channel()
    channel.exchange_declare(exchange="change_dir",exchange_type="direct")
    # 定义三个路由键
    routings=["info","warning","error"]
    # 将消息依次发送到交换机,并设置路由键
    for routing in routings:
        messege='%s message'% routing
        channel.basic_publish(exchange="change_dir",routing_key=routing,body=messege)
        print(messege
    
              )
    connection.close()

    receive2.py

    import pika
    import sys
    connection=pika.BlockingConnection(pika.ConnectionParameters("localhost"))
    # 创建通道
    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('',exclusive=True)
    queue_name = result.method.queue
    
    for routing in routings:
        channel.queue_bind(queue_name,"change_dir",routing_key=routing)
    
    def callback(ch,method,properties,body):
        print(" [x] Received %r" % body)
    
    channel.basic_consume(queue_name,callback,auto_ack=False)
    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()

    4.示例演示

    打开三个终端,在前两个运行receive3.py:

    python receive2.py info warning

    python receive2.py error

     第三个终端运行send2.py:

    查看接收端的消息:

    我们可以发现,接收端只能获取指定路由键的消息队列。

     

  • 相关阅读:
    php连接mysql数据库
    关于chrome控制台警告:Synchronous XMLHttpRequest on the main thread
    mac“打不开身份不明的开发者”
    微信小程序开发warning: Now you can provide attr "wx:key" for a "wx:for" to improve performance
    将任何GitHub内的代码转为外部CDN网址
    把自己的代码发布到npm(npm publish)
    wordpress写文章添加gif图片变成静态图片的解决办法
    canvas实现刮刮乐
    api文档管理系统合集
    niubi-job:一个分布式的任务调度框架设计原理以及实现
  • 原文地址:https://www.cnblogs.com/Hale-wang/p/11821237.html
Copyright © 2011-2022 走看看