10-EasyNetQ之控制隊列名稱


EasyNetQ默認行為,當生成隊列的名稱時,使用消息類型名+subscription Id。例如:PartyInvitation 這個消息類型,命名空間為 EasyNetQ.Tests.Integration,生成的隊列名稱為: EasyNetQ.Tests.Integration.PartyInvitation:EasyNetQ.Tests_schedulingTest1,這里假設subscription Id為 schedulingTest1.

控制隊列名稱

控制隊列名稱,用Queue attribute 在消息類上去注釋。

[Queue("TestMessagesQueue", ExchangeName = "MyTestExchange")]
public class TestMessage
{
   public string Text { get; set; }
}

// ...

bus.Subscribe<TestMessage>(string.Empty, 
        msg => Console.WriteLine(msg.Text));

這里我們告訴EasyNetQ要用TestMessagesQueue作為隊列名,用MyTestExchange作為交換機名字。注意:傳給Subscribe方法的subscriptionsId參數為空。假如你指定了subscriptionId,那么subscriptionId將會追加到隊列名的后面。

讓不是通過EasyNetQ發布的消息運作起來

使用QueueAttribute允許消費來至於任何隊列的消息。這可以用來消費來至於其他非EasyNetQ的框架發布的消息,只要滿足一個條件:隊列中消息有type屬性設置。type 屬性值被用在序列化消息時去決定消息的類型。只要這個屬性設置為一些有意義的,這個消息就可以被消費。解碼type名是在ITypeNameSerializer.Deserialize方法中做的。

如果你決定用自己的ITypeNameSerializer實現,那么要小心你如何去執行反序列化方法,假如你的實現是CPU計算密集型的,那么是危險的會限制你出隊消息的速度。比如,程序集掃描沒有類型緩存是一個壞主意。

命名隊列注意事項

設置隊列名稱為空字符串將會使用默認命名規則。隊列名最大255個字符(這是RabbitMQ client 類庫強制規定)。隊列名稱可以是字母,數字,-,下划線_,點號.,或冒號:。隊列名稱以“amq.”開頭,是預留的,為了預定義和標准化隊列。

英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Controlling-Queue-names
本文地址:http://www.cnblogs.com/HuangLiang/p/EasyNetQ_Controlling_Queue_names.html


免責聲明!

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



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