>백엔드 개발 >파이썬 튜토리얼 >Python Rabbitmq 사용 (4)

Python Rabbitmq 사용 (4)

黄舟
黄舟원래의
2017-01-17 14:57:191703검색

세 번째 기사에서는 스위치 사용에 대해 설명합니다. 이미 모든 수신자에게 메시지를 보낼 수 있지만 자유롭게 맞춤설정해야 하는 경우 일부 메시지는 일부 수신자에게 전송되고 일부 메시지는 다른 수신자에게 전송됩니다. 어떻게 해야 할까요? 이 경우 라우팅 키가 사용됩니다.


라우팅 키의 작동 원리: 각 수신 측의 메시지 큐가 스위치에 바인딩되면 해당 라우팅 키를 설정할 수 있습니다. 발신자가 스위치를 통해 정보를 보낼 때 라우팅 키를 지정할 수 있으며, 스위치는 라우팅 키를 기반으로 해당 메시지 대기열에 메시지를 보내 수신 측에서 메시지를 받을 수 있습니다.


이전 기사에 이어 여전히 send.py 및 receive.py를 사용하여 라우팅 키 기능을 시뮬레이션합니다. send.py는 송신측을 나타내고 receive.py는 수신측을 나타냅니다. 인스턴스의 기능은 정보, 경고, 오류의 세 가지 수준의 정보를 서로 다른 수신 측에 보내는 것입니다.


send.py 코드 분석


이전 기사와 비교하여 변경 사항은 주로 두 가지 측면입니다. 🎜>

스위치 유형을 다이렉트로 설정하세요. 이전 글에서는 브로드캐스팅을 의미하는 fanout으로 설정했는데, 여기서 direct로 설정한다는 것은 설정된 라우팅 키에 따라 메시지가 전송된다는 뜻이다.

정보 전송 시 보낼 라우팅 키를 설정하세요.

#!/usr/bin/env python
#coding=utf8
import pika
connection= pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel= connection.channel()
#定义交换机,设置类型为direct
channel.exchange_declare(exchange='messages',type='direct')
#定义三个路由键
routings= ['info','warning','error']
#将消息依次发送到交换机,并设置路由键
for routingin routings:
message= '%s message.' % routing
channel.basic_publish(exchange='messages',
routing_key=routing,
body=message)
print message
connection.close()

receive.py 코드 분석


세 번째 글과 비교하면 변경 사항은 크게 세 가지 측면입니다.

설정 스위치 유형 (유형)은 직접적입니다.

매개변수를 얻으려면 명령줄 기능을 추가하세요. 매개변수는 라우팅 키입니다.
큐를 스위치에 바인딩할 때 라우팅 키를 설정하세요.

#!/usr/bin/env python
#coding=utf8
import pika, sys
connection= pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel= connection.channel()
#定义交换机,设置类型为direct
channel.exchange_declare(exchange='messages',type='direct')
#从命令行获取路由键参数,如果没有,则设置为info
routings= sys.argv[1:]
if not routings:
routings= ['info']
#生成临时队列,并绑定到交换机上,设置路由键
result= channel.queue_declare(exclusive=True)
queue_name= result.method.queue
for routingin routings:
channel.queue_bind(exchange='messages',
queue=queue_name,
routing_key=routing)
def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
channel.basic_consume(callback, queue=queue_name, no_ack=True)
print ' [*] Waiting for messages. To exit press CTRL+C'
channel.start_consuming()

두 개의 터미널을 엽니다. 하나는 python receive.py info warning 코드를 실행합니다. 이는 정보와 경고 메시지만 수신됨을 의미합니다. 다른 터미널에서 send.py를 실행하면 수신 터미널이 정보와 경고 메시지만 받는 것을 볼 수 있습니다. 여러 터미널을 열고 receive.py를 실행하고 다양한 라우팅 키 매개변수를 전달하면 더 확실한 효과를 볼 수 있습니다.


수신측이 실행 중일 때 Rabbitmqctl list_bounds를 사용하여 바인딩 상태를 볼 수 있습니다.


위는 Python Rabbitmq(4)를 사용한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.