-
RabbitMQ 토픽Cloud 2015. 3. 17. 09:00특정 주제에 대한 메세지를 주고받는 기능.topic exchange로 보내지는 메세지는 반드시 routing_key를 가지고 있어야함. routing_key 크기는 255 바이트.바인딩 키에 특수문자 사용가능.- * 하나의 단어를 의미- # 없거나 하나이상의 단어를 의미
예제소스emit_log_topic.py#!/usr/bin/env pythonimport pikaimport sysconnection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()channel.exchange_declare(exchange='topic_logs',type='topic')routing_key = sys.argv[1] if len(sys.argv) > 1 else 'anonymous.info'message = ' '.join(sys.argv[2:]) or 'Hello World!'channel.basic_publish(exchange='topic_logs',routing_key=routing_key,body=message)print " [x] Sent %r:%r" % (routing_key, message)connection.close()receive_logs_topic.py#!/usr/bin/env pythonimport pikaimport sysconnection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))channel = connection.channel()channel.exchange_declare(exchange='topic_logs',type='topic')result = channel.queue_declare(exclusive=True)queue_name = result.method.queuebinding_keys = sys.argv[1:]if not binding_keys:print >> sys.stderr, "Usage: %s [binding_key]..." % (sys.argv[0],)sys.exit(1)for binding_key in binding_keys:channel.queue_bind(exchange='topic_logs',queue=queue_name,routing_key=binding_key)print ' [*] Waiting for logs. To exit press CTRL+C'def callback(ch, method, properties, body):print " [x] %r:%r" % (method.routing_key, body,)channel.basic_consume(callback,queue=queue_name,no_ack=True)channel.start_consuming()테스트방법각 패턴별 메세지 수신자 실행.python receive_logs_topic.py "#"python receive_logs_topic.py "kern.*"python receive_logs_topic.py "*.critical"python receive_logs_topic.py "kern.*" "*.critical"메세지 발행python emit_log_topic.py "kern.critical" "A critical kernel error"참고'Cloud' 카테고리의 다른 글
OpenStack이 지원하는 하이퍼바이저 종류 (0) 2015.03.20 RabbitMQ RPC(Remote procedure call) (0) 2015.03.18 RabbitMQ 라우팅 (0) 2015.03.16 RabbitMQ를 이용한 메세지 발행/구독 모델 (0) 2015.03.13 RabbitMQ 작업 큐로 이용하기 (0) 2015.03.12 댓글