8-EasyNetQ之Send & Receive


鑒於Publish/Subsrcibe和Request/Response模式是位置透明的,在這個方面,你不需要去指定消息的消費者具體所處的位置,Send/Receive模式是特別針對通過命名隊列來設計的。它也使得不用假定關於什么樣的消息類型能發送到這個隊列。這意味着,你能夠發送不同類型的消息到相同的隊列中。

Send/Receive模式對於創建“命令管道”,在那種你想為單個命令處理器建立一個緩沖通道情況下,是最理想的。

去發送一個消息,使用IBus的Send方法,需要指定你想發送消息到指定隊列的名稱和消息本身。

bus.Send("my.queue", new MyMessage{ Text = "hello widget!"});

為特定消息類型創建一個消息接收器,使用IBus上的Receive方法:

bus.Receive<MyMessage>("my.queue", 
    message => Console.WriteLine("Message:{0}",message.Text));

你能夠在相同隊列上為不同的消息類型創建多個接收者,通過使用Receive 帶有一個Action 的重載方法,代碼如下:

bus.Receive("my.queue", x => x
    .Add<MyMessage>(message => deliveredMyMessage = message)
    .Add<MyOtherMessage>(message => deliveredMyOtherMessage = message));

如果消息送達了一個接收隊列,但是沒有匹配到任何接收者,EasyNetQ將會把消息帶着一個異常“No handler for message type 寫進EasyNetQ的錯誤隊列”。

注意:你可能不想對相同隊列多次調用bus.Receive方法。這就將在隊列和RatbbitMQ上創建一個新的消費者去輪詢這些消息。假如你正在消費不同類型的消息,用不同的Receive調用(因此也是不同的消費者),你的有些消息將會最終發送到錯誤隊列,因為EasyNetQ不能找到處理器去處理與你消息類型有關系的消費者,消息將會被消耗掉

英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Send-Receive
本文地址:http://www.cnblogs.com/HuangLiang/p/EasyNetQ_Send_Receive.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM