세 번째 기사에서는 스위치 사용에 대해 설명합니다. 이미 모든 수신자에게 메시지를 보낼 수 있지만 자유롭게 맞춤설정해야 하는 경우 일부 메시지는 일부 수신자에게 전송되고 일부 메시지는 다른 수신자에게 전송됩니다. 어떻게 해야 할까요? 이 경우 라우팅 키가 사용됩니다.
라우팅 키의 작동 원리: 각 수신 측의 메시지 큐가 스위치에 바인딩되면 해당 라우팅 키를 설정할 수 있습니다. 발신자가 스위치를 통해 정보를 보낼 때 라우팅 키를 지정할 수 있으며, 스위치는 라우팅 키를 기반으로 해당 메시지 대기열에 메시지를 보내 수신 측에서 메시지를 받을 수 있습니다.
이전 기사에 이어 여전히 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()
매개변수를 얻으려면 명령줄 기능을 추가하세요. 매개변수는 라우팅 키입니다.
큐를 스위치에 바인딩할 때 라우팅 키를 설정하세요.
#!/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()