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

posted on 2017-12-05 15:55  困兽斗  阅读(580)  评论(0编辑  收藏  举报

导航