• RabbitMQ之Routing(路由有选择的接收)


    创建绑定方式  

    1 channel.queue_bind(exchange="交换器的名字",
    2                   queue="队列的名字")

    绑定使用路由参数(主要避免basic_publish参数混淆)

    1 channel.queue_bind(exchange="交换器的名字",
    2                     queue="队列的名字",
    3                     routing_key="black")

    直接交换

      在消息发布与订阅中,消息广播给所有在线的消费者,假如说有时候我们只需要接收严重错误的日志报告写到磁盘中,之前使用的fanout交换,并没有带来太大的灵活性

      此时就可以使用直接交换:思想绑定密钥与路由密钥完全匹配的队列才能发收消息

     多重绑定

      用相同的绑定密钥绑定多个队列

    但在这里官方是将每种严重性创建一个新的绑定关系

     send_log_direct.py

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import pika
     5 import sys
     6 
     7 credentials = pika.PlainCredentials('admin', 'admin123456')
     8 connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.1.6', credentials=credentials))
     9 channel = connection.channel()
    10 # 申明交换器名以及类型
    11 channel.exchange_declare(exchange='direct_logs', exchange_type='direct')
    12 # 日志严重级别
    13 severity = sys.argv[1] if len(sys.argv) > 1 else 'info'
    14 message = ' '.join(sys.argv[2:]) or 'Hello World!'
    15 channel.basic_publish(
    16     exchange='direct_logs', routing_key=severity, body=message)
    17 print(" [x] Sent %r:%r" % (severity, message))
    18 connection.close()

    receive_log_direct.py

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import pika
     5 import sys
     6 
     7 credentials = pika.PlainCredentials('admin', 'admin123456')
     8 connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.1.6', credentials=credentials))
     9 channel = connection.channel()
    10 
    11 channel.exchange_declare(exchange='direct_logs', exchange_type='direct')
    12 
    13 result = channel.queue_declare(queue='', exclusive=True)
    14 queue_name = result.method.queue
    15 
    16 severities = sys.argv[1:]
    17 if not severities:
    18     sys.stderr.write("Usage: %s [info] [warning] [error]
    " % sys.argv[0])
    19     sys.exit(1)
    20 
    21 for severity in severities:
    22     channel.queue_bind(
    23         exchange='direct_logs', queue=queue_name, routing_key=severity)
    24 
    25 print(' [*] Waiting for logs. To exit press CTRL+C')
    26 
    27 
    28 def callback(ch, method, properties, body):
    29     print(" [x] %r:%r" % (method.routing_key, body))
    30 
    31 
    32 channel.basic_consume(
    33     queue=queue_name, on_message_callback=callback, auto_ack=True)
    34 
    35 channel.start_consuming()
  • 相关阅读:
    关系数据理论之第三范式
    关系数据理论之第二范式
    关系数据理论之第一范式
    排序之外部排序
    排序之选择排序
    排序之希尔排序
    排序之基数排序
    排序之计数排序
    排序之堆排序
    排序之归并排序
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11579532.html
Copyright © 2020-2023  润新知