servicestack,Rabbitmq,servicestack" /> servicestack,Rabbitmq,servicestack" />

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

ServiceStack创建的RabbitMQ队列名称中的奇怪字符,rabbitmq,servicestack,Rabbitmq,servicestack,我正在尝试向ServiceStack和RabbitMQ中的消息添加一些自定义逻辑 ServiceStack创建的队列似乎在队列名称前面有一些难以辨认的字符,这使得很难按名称引用它们。例如(来自RabbitMQ管理工具的链接): 请注意队列名称前面的%E2%80%8E%E2%80%8E。尽管队列看起来像mq:TestRequest.inq,但它似乎有不同的名称。我也在另一台机器上进行了检查,结果是一致的。我还怀疑路由密钥也受到同样的影响 但是,如果我手动创建这样的队列(据我所知,ServiceS

我正在尝试向ServiceStack和RabbitMQ中的消息添加一些自定义逻辑

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

请注意队列名称前面的%E2%80%8E%E2%80%8E。尽管队列看起来像mq:TestRequest.inq,但它似乎有不同的名称。我也在另一台机器上进行了检查,结果是一致的。我还怀疑路由密钥也受到同样的影响

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

creted队列有一个“普通”名称,没有额外字符。

此外,交易所似乎是按照预期的名称创建的

我的问题是:

如何强制ServiceStack在不附加这些字符的情况下创建队列

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


编辑:


插入的字符似乎是从左到右的标记(
‎
\u200e)。在队列名称/路由键前面加上这些字符似乎可以完成任务。但是,这看起来相当粗糙,因此我希望避免这样做。

这可能在RabbitMQ的内部,并且可能取决于您使用的是AMQP还是STOMP。以下是全文的一个例外:

如果队列名称、交换名称或路由密钥中包含/、%或非ascii字节,则每个字节都将替换为序列%dd,其中dd是字节的十六进制代码


我没有看到ServiceStack的RabbitMqServer创建的任何包含此前缀的队列名称。你能提供一个独立的复制吗?(即链接到GitHub)我最终发现了问题。我们从web.config读取队列前缀,该条目包含这些字符,这自然会传播到RabbitMQ。但这确实很难找到,因为即使是VS调试器也没有显示任何特殊字符。
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);
}