RawRabbit使用或不使用INamingConvention设置队列名称

时间:2017-04-20 13:56:13

标签: c# rabbitmq rawrabbit

如何在使用带有C#的RawRabbit时指定队列名称?我找不到任何关于如何做的例子。如果实现INamingConvention是唯一的方法,那么如何使用INamingConvention?

我尝试过以下方式指定队列名称,但它仍然使用_appname作为后缀。

client.SubscribeAsync<string>(async (msg, context) =>
        {
          Console.WriteLine("Recieved: {0}", msg);
        }, cfg=>cfg.WithQueue(q=>q.WithName("ha.test")));

1 个答案:

答案 0 :(得分:1)

只需在GitHub中阅读RawRabbit的源代码即可。看起来有一个WithSubscriberId(string subscriberId)可供您使用。 subscriberId设置名称后缀,该后缀附加到您设置的队列名称的末尾。

使用QueueConfiguration类中的FullQueueName属性

创建队列
public string FullQueueName
{
    get
    {
        var fullQueueName =  string.IsNullOrEmpty(NameSuffix)
            ? QueueName
            : $"{QueueName}_{NameSuffix}";

        return fullQueueName.Length > 254
            ? string.Concat("...", fullQueueName.Substring(fullQueueName.Length - 250))
            : fullQueueName;
    }
}

所以只需将subscriberId设置为空字符串。

client.SubscribeAsync<string>(async (msg, context) =>
{
    Console.WriteLine("Recieved: {0}", msg);
}, cfg=>cfg.WithQueue(q=>q.WithName("ha.test")).WithSubscriberId(""));

这样的事情。我的PC上没有.NET Core,所以我无法验证它,所以请随时告诉我它不起作用。

已更新 修复了NewToSO评论

建议的代码