RabbitMQ(5) - topics

7550 단어 rabbitmq

RabbitMQ(5) - topics


`rabbitmq`의 `topic exchange`는 루트 키를 특정한 모드와 일치시켜 정규 일치하는 방식으로 좋아하는 정보를 수신합니다.

topic exchange


'topic'모드를 사용하려면'routing_key`.반대로 일정한 요구에 따라 이 값을 설정해야 한다.routing_key`는 topic 모드에서 이 값으로 특정 속성을 가진 단어를 선택해야 합니다.
  • \* (star) can substitute for exactly one word.
  • # (hash) can substitute for zero or more words.

  • 예를 들어 생산자의'routing_key`를 `test1로 설정합니다.test2.test3', 그러면 중귀속 메시지 대기열을 소비하는'routing_key`는 생산자의`routing_와 일치해야 합니다key`.
    # 
    routing_key = 'test1.test2.test3'
    channel.basic_publish(exchange='topic_test', routing_key=routing_key, body=message)
    
    # 
    routing_key = 'test1.*' # 
    routing_key = '*.test2.*' # 
    routing_key = 'test3' # 
    channel.queue_bind(exchange='topic_logs', queue=queue_name, routing_key=binding_key)

    예제


    생산자는 다음과 같이 순서대로'routing_key`가 A와 B라면 두 소비자의`routing_를 설정해야 한다key`는 각각 메시지를 읽습니다.
    #!/usr/bin/env python
    # coding=utf-8
    import pika
    import sys
    import time
    
    connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost'))
    channel = connection.channel()
    
    channel.exchange_declare(exchange='topic_test',
    type='topic')
    
    message = "test "
    for i in range(20):
        for item in ['A', 'B']:
            routing_key = item
            channel.basic_publish(exchange='topic_test',routing_key=routing_key, body=message+item)
            print " [x] Sent %r:%r" % (routing_key, message)
            time.sleep(2)
    connection.close()    

    시작 명령은 다음과 같습니다.
    python receive.py A
    python receive.py B

    소비자는 다음과 같습니다.
    #!/usr/bin/env python
    # coding=utf-8
    
    import pika
    import sys
    
    def callback(ch, method, properties, body):
    print " [x] %r:%r" % (method.routing_key, body,)
    
    connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost'))
    channel = connection.channel()
    
    channel.exchange_declare(exchange='topic_test',
    type='topic')
    
    result = channel.queue_declare(exclusive=True)
    queue_name = result.method.queue
    
    binding_key = sys.argv[1]
    print "Usage: %s [binding_key]..." % (sys.argv[1])
    
    channel.queue_bind(exchange='topic_test', queue=queue_name, routing_key=binding_key)
    print ' [*] Waiting for logs. To exit press CTRL+C'
    channel.basic_consume(callback, queue=queue_name, no_ack=True)
    
    channel.start_consuming()

    좋은 웹페이지 즐겨찾기