zoukankan      html  css  js  c++  java
  • RabbitMQ之Topics(更加细粒度的接收消息)

    组播

      功能更加的强大,通过'#'(哈希)绑定键绑定时候,可以接收所有的消息,此时与路由无关,此时就像fanout交换器中一样

      当在绑定中不使用特殊字符'*','#'接收消息的时候,此时就跟direct一样

     topic_send.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='topic_logs', exchange_type='topic')
    12 
    13 routing_key = sys.argv[1] if len(sys.argv) > 2 else 'anonymous.info'
    14 message = ' '.join(sys.argv[2:]) or 'Hello World!'
    15 channel.basic_publish(
    16     exchange='topic_logs', routing_key=routing_key, body=message)
    17 print(" [x] Sent %r:%r" % (routing_key, message))
    18 connection.close()

    topic_recevie.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='topic_logs', exchange_type='topic')
    12 
    13 result = channel.queue_declare('', exclusive=True)
    14 queue_name = result.method.queue
    15 
    16 binding_keys = sys.argv[1:]
    17 if not binding_keys:
    18     sys.stderr.write("Usage: %s [binding_key]...
    " % sys.argv[0])
    19     sys.exit(1)
    20 
    21 for binding_key in binding_keys:
    22     channel.queue_bind(
    23         exchange='topic_logs', queue=queue_name, routing_key=binding_key)
    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()

     最终效果就可以达到选择性接收并且还能够更加细粒度的可以接收消息

  • 相关阅读:
    HTML5-Input
    在安装搜狗输入法的时候找到的一个安装手动下载软件的包
    IP结构与操作之__inet_insert_ifa/__inet_del_ifa
    IP结构与操作之inet_addr_onlink
    IP结构与操作之inet_confirm_addr && confirm_addr_indev
    IP结构与操作之inet_select_addr
    IP结构与操作之inetdev_init && inetdev_destroy
    IP结构与操作之in_device结构和in_ifaddr结构
    网络模块初始化
    网络设备之uc_promisc
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11579546.html
Copyright © 2011-2022 走看看