上一篇說了路由鍵的功能,經過設置路由鍵,能夠將消息發送到相應的隊列,這裏的路由鍵是要徹底匹配,好比info消息的只能發到路由鍵爲info的消息隊列。html
路由鍵模糊匹配,就是可使用正則表達式,和經常使用的正則表示式不一樣,這裏的話「#」表示全部、所有的意思;「*」只匹配到一個詞。看完示例就能明白了。python
這邊繼上一篇,仍是用send.py和receive.py來實現路由鍵模糊匹配的功能。send.py表示發送端,receive.py表示接收端。實例的功能大概是這樣:好比你有個知心好朋友,無論開心、傷心、工做上的仍是生活上的事情均可以和她說;還有一些朋友能夠分享開心的事情;還有一些朋友,你能夠把不開心的事情和她說。正則表達式
send.py代碼分析app
由於要進行路由鍵模糊匹配,因此交換機的類型要設置爲topic,設置爲topic,就可使用#,*的匹配符號了。測試
1spa 2命令行 3code 4htm 5rabbitmq 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
上例中定義了四種類型的消息,容易理解,就不解釋了,而後依次發送出去。
receive.py代碼分析
一樣,交換機的類型要設定爲topic就能夠了。從命令行接收參數的功能稍微調整了一下,就是沒有參數時報錯退出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
打開四個終端,一個運行以下,表示任何事情均可以和她說:
python receive.py "#"
另一個終端 運行以下,表示能夠和她分享開心的事:
python receive.py "happy.*"
第三個運行以下,表示工做上的事情能夠和她分享:
python receive.py "*.work"
最後一個運行python send.py。結果不難想象出來,就不貼出來了。
參考文章:http://www.rabbitmq.com/tutorials/tutorial-five-python.html
在參考文章的最後面有提到幾個難點,筆者本身作了測試,供你們參考:
一、發送信息時,若是不設置路由鍵,那麼路由鍵設置爲」*」的接收端是否能接收到消息?
發送信息時,若是不設置路由鍵,默認是表示廣播出去,理論上全部接收端均可以收到消息,可是筆者試了下,路由鍵設置爲"*"的接收端收不到任何消息。 只有發送消息時,設置路由鍵爲一個詞,路由鍵設置爲"*"的接收端才能收到消息。在這裏,每一個詞使用"."符號分開的。
二、發送消息時,若是路由鍵設置爲」..」,那麼路由鍵設置爲」#.*」的接收端是否能接收到消息?若是發送消息時,路由鍵設置爲一個詞呢?
兩種狀況,筆者都測試過了,能夠的。
三、」a.*.#」 和」a.#」的區別
"a.#"只要字符串開頭的一個詞是a就能夠了,好比a、a.haha、a.haha.haha。而這樣的詞是不行的,如abs、abc、abc.haha。 "a.*.#"必需要知足a.*的字符串才能夠,好比a.、a.haha、a.haha.haha。而這樣的詞是不行的,如a。
弄完上面的這些個問題,筆者覺着有些鑽牛角尖了,不過既然官方有提出來,就鑽一回吧。