我创建了一个 NServiceBus Distributor 和 Worker,在不同的机器上运行。当我运行工作程序时,它成功地向分配器发送了一条消息(我可以看到它通过存储队列处理)但是由于某种原因在分配器上创建了一个输出队列,称为
'DIRECT=TCP:xx.xx.xx.xx\PRIVATE$\order_queue$ 当队列应该被称为 'DIRECT=OS:WORKERDNSNAME\private$\myqueue' 时。
有谁知道为什么要创建 order_queue$ ?
我创建了一个 NServiceBus Distributor 和 Worker,在不同的机器上运行。当我运行工作程序时,它成功地向分配器发送了一条消息(我可以看到它通过存储队列处理)但是由于某种原因在分配器上创建了一个输出队列,称为
'DIRECT=TCP:xx.xx.xx.xx\PRIVATE$\order_queue$ 当队列应该被称为 'DIRECT=OS:WORKERDNSNAME\private$\myqueue' 时。
有谁知道为什么要创建 order_queue$ ?
直接从pg2e.blogspot.co.uk的旧帖子中直接复制:
来自私有网络的 HTTP 事务队列
当从没有公共 IP 地址的服务器通过 http/s 向事务队列发送消息时,ACK 消息可能很难到达目的地。这是由于与本文中相同的原因 (基本上NATting 导致与消息目标地址不匹配)。
默认情况下,收据会发送到发送计算机的名称,除非双方都驻留在同一网络上,否则这当然不会起作用。要解决此问题,您必须将收据映射到发件人的公共地址。这是通过在 C:\WINDOWS\system32\msmq\mapping中创建一个包含以下内容的 xml 文件(任何名称)来完成的。
<StreamReceiptSetup xmlns="msmq-streamreceipt-mapping.xml"> <setup> <LogicalAddress>http://msmq.domain.com/*</LogicalAddress> <StreamReceiptURL>http://[ADDRESS_TO_SENDER]/msmq/Private$/order_queue$</StreamReceiptURL> </setup> <default>http://xxx.xx.xxx.xx/msmq/Private$/order_queue$</default> </StreamReceiptSetup>
说明:发送到 msmq.domain.com 上的任何队列的所有消息都会将其收据发送到给定的 StreamReceiptURL。order_queue$ 队列用于处理事务控制消息。
我怀疑更高版本的 MSMQ 或 NServiceBus 会自动处理创建此队列,而无需您自己创建 XML 文件。