第三篇說明了關於交換機的使用,已經能實現給所有接收端傳送訊息,但是如果需要自由定製,有的訊息發給其中一些接收端,有些訊息傳送給另外一些接收端,要怎麼辦呢?這種情況下就要用到路由鍵了。
路由鍵的工作原理:每個接收端的訊息佇列在繫結交換機的時候,可以設定相應的路由鍵。傳送端通過交換機傳送資訊時,可以指明路由鍵 ,交換機會根據路由鍵把訊息傳送到相應的訊息佇列,這樣接收端就能接收到訊息了。
send.py**分析
2. 傳送資訊時設定傳送的路由鍵。
#!/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 routing inroutings:
message ='%s message.' % routing
channel.basic_publish(exchange='messages',
routing_key=routing,
body=message)
printmessage
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 routing inroutings:
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,表示只接收info和warning的訊息。另外乙個終端執行send.py,可以觀察到接收終端只接收到了info和warning的訊息。如果開啟多個終端執行receive.py,並傳入不同的路由鍵引數,可以看到更明顯的效果。
當接收端正在執行時,可以使用rabbitmqctl list_bindings來檢視繫結情況。
參考文章:
mac 使用docker 安裝 rabbitmq
專案要用到rabbitmq 官網說brew install 但是brew update就半天都不成功,突然想起了docker,以前用過一點點,就試著來了一下 docker search rabbitmq management docker pull rabbitmq management docke...
CentOS 使用yum安裝rabbitmq
rabbitmq erlang版本要求 rabbitmq erlang name rabbitmq erlang baseurl gpgcheck 1 gpgkey repo gpgcheck 0 enabled 1 然後執行 sudo yum install erlang 即可安裝 執行 erl ...
erlang jcl遠端除錯 rabbitmq
job control mode jcl in which jobs can be started,stopped,detached or connected.only the current job can communicate with the shell.通過jcl,我們可以遠端接入乙個er...