1

我创建了一个 NServiceBus Distributor 和 Worker,在不同的机器上运行。当我运行工作程序时,它成功地向分配器发送了一条消息(我可以看到它通过存储队列处理)但是由于某种原因在分配器上创建了一个输出队列,称为

'DIRECT=TCP:xx.xx.xx.xx\PRIVATE$\order_queue$ 当队列应该被称为 'DIRECT=OS:WORKERDNSNAME\private$\myqueue' 时。

有谁知道为什么要创建 order_queue$ ?

4

1 回答 1

2

直接从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 文件。

于 2014-12-31T14:18:49.257 回答