1

別々のマシンで実行する NServiceBus ディストリビューターとワーカーを作成しました。ワーカーを実行すると、ディストリビューターにメッセージが正常に送信されます (ストレージ キューを介して処理されていることを確認できます) が、何らかの理由で、呼び出されたディストリビューターで出力キューが作成されます。

'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 メッセージが宛先に到達するのに苦労する場合があります。これは、この投稿と同じ原因によるものです (基本的に NAT を実行すると、メッセージの宛先アドレスが一致しなくなります)

デフォルトでは、領収書は送信側のコンピューター名に送信されますが、もちろん両方の当事者が同じネットワークに存在しない限り機能しません。これを修正するには、領収書を送信者の公開アドレスにマップする必要があります。これは、次の内容で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 に答える