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

posted @ 2017-07-08 23:10  Leo  阅读(1831)  评论(0编辑  收藏  举报