ServiceStack创建的RabbitMQ队列名称中的奇怪字符

时间:2015-06-04 01:19:43

标签: rabbitmq servicestack

我试图在ServiceStack和RabbitMQ中为消息添加一些自定义逻辑。

似乎ServiceStack创建的队列在队列名称前面有一些难以辨认的字符,这使得很难按名称引用它们。例如(来自RabbitMQ管理工具的链接):

http://localhost:15672/#/queues/%2F/%E2%80%8E%E2%80%8Emq%3ATestRequest.inq

请注意队列名称前面加上%E2%80%8E%E2%80%8E 。虽然队列看起来像 mq:TestRequest.inq ,但似乎有一个不同的名称。我还检查了另一台机器,行为是一致的。我也怀疑路由密钥会以同样的方式受到影响。

但是,如果我手动创建这样的队列(据我所见,ServiceStack以类似的方式完成):

RabbitMqServer mqServer = new RabbitMqServer(connectionString: hostName, username: userName, password: password);
RabbitMqMessageFactory factory = (RabbitMqMessageFactory)MqServer.MessageFactory;

using (var mqClient = new RabbitMqProducer(factory))
{
    var channel = mqClient.Channel;

    string qName = new QueueNames(typeof(TestRequest)).In;
    channel.QueueDeclare(qName, true, false, false, null);
}

创建的队列有一个"正常"没有额外字符的名称。 http://localhost:15672/#/queues/%2F/mq%3ATestRequest.inq

此外,似乎交换是使用预期的名称创建的。

我的问题:

如何强制ServiceStack创建队列而不附加这些字符?

OR

如何构造包含这些字符的队列名称?

<小时/> 修改

插入的字符似乎是从左到右的标记( &lrm; \ u200e )。将这些字符预先添加到队列名称/路由键似乎可以完成工作。然而,这看起来相当hacky所以我想避免这样做。

1 个答案:

答案 0 :(得分:2)

这可能在RabbitMQ的内部,可能取决于您使用的是AMQP还是STOMP。除了整页之外,这是一个:

  

如果/,%或非ascii字节在queuename,exchange_name或routing_key中,则它们每个都被替换为序列%dd,其中dd是该字节的十六进制代码。

RabbitMQ - Stomp - Destinations - AMQP Semantics