RabbitMQ原理及教程:http://www.cnblogs.com/AlvinLee/p/6141834.html EasyNetQ是什麼以及常見用法這裡都不做講解。可以參考這篇博文:http://blog.csdn.net/hesi9555/article/details/70139346 ...
RabbitMQ原理及教程:http://www.cnblogs.com/AlvinLee/p/6141834.html
EasyNetQ是什麼以及常見用法這裡都不做講解。可以參考這篇博文:http://blog.csdn.net/hesi9555/article/details/70139346
這裡主要來談談EasyNetQ中WithTopic方法中的一個容易浪費大量時間的點。
使用EasyNetQ的Subscribe方法後,再使用SubscribeWithTopic方法,你可能會發現無論Routing Key(SubscribeWithTopic中的第三個參數)寫什麼東西都沒用,不管你的Routing key和發送者的Routing Key一樣或者不一樣,接收者統統都能收得到,即WithTopic的過濾功能失效了。這是為什麼呢?
這時候,只要你打開RabbitMQ的web管理後臺的隊列面板,
(http://localhost:15672/#/queues ,開不了的去rabbitmq-server的安裝目錄的sbin下右鍵打開命令行,運行
.\rabbitmq-plugins.bat enable rabbitmq_management
來啟動web管理後臺。)
點開新創建出來的隊列,點開bindings下拉菜單,如果你看到Routing key這一欄的第一項是“#”,意味著之後添加的所有Routing key都失效了。#代表接受所有。每次運行Subscribe都會自動加上“#”過濾規則並且置頂。
解決方案有:
1、手動刪除。"#"那一項點擊unbind按鈕即可。之後如果使用了Subscribe後還想改成SubscribeWithTopic就必須再手動刪一次
2、利用代碼刪除。
var bus = RabbitHutch.CreateBus(connectionString);
IAdvancedBus advancedBus = bus.Advanced; IBinding bind = advancedBus.Bind(new Exchange("Model.Message:Model(交換機名)"), new Queue("Model.Message:Model_id1(隊列名)",false), "#" ); advancedBus.BindingDelete(bind);