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
