13、Controlling Queue names 控制队列名称
EasyNetQ生成队列名称默认使用:消息类型名 + subscription_Id。例如:MyMessage这个消息类型的命名空间为Liksoft.Model,生成的程序集文件名为Models.dll,那么在RabbitMQ生成的队列名称为: Liksoft.Model.MyMessage:Models_subscription_Id.
控制队列名称
如果你希望写代码控制队列的名称,要用Queue特性在消息类上去注释。
[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实现,那么要小心你如何去实现Deserialize
反序列化方法,假如你的实现是处理器密集型的,那么是危险是限制你出队消息的速度。比如,程序集扫描没有类型缓存是一个坏主意。
命名队列注意事项
把队列名称设置为空字符串,将使用默认命名规则。队列名最大255个字符(这是RabbitMQ client 类库强制规定)。队列名称可以是字母,数字,-,下划线_,句点号.,或冒号:。队列名称以“amq.”开头,是预留的,为了预定义和标准化队列。
英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Controlling-Queue-names