2017-01-16 7 views
1

リモートキューへの配信が確認されており、MSDN Exists()の方法ではリモートキューチェックがサポートされていません。MSMQリモートキューへの同期書き込み

私によると、メッセージ配信は

  • リモートマシンに到達できない、次の2つのシナリオで失敗する可能性があります。
  • マシン上のキューが存在しないか、削除されました。

私はトランザクションキューを使用しています。 AdministrationQueueUseDeadLetterQueueを設定すると、メッセージが失われないことが保証されます。

しかし、リモートマシンのキューにメッセージを送信する同期方法が必要です。 MSMQはこれをサポートしていますが、設計上サポートされていない場合でもどうすれば可能ですか?

答えて

0

MSMQはこれをサポートしていますが、デザインによっては がサポートされていない場合でもどうすれば可能ですか?

MSMQサービスには、二重メッセージングをサポートする組み込みの方法がありません。

これを達成するには、キューに入れられたチャネルの両端でコードを作成する必要があります。しかし、これは一般的に最高で複雑です。

次のリンクは、System.Messagingを使用することによってこれを実現する方法について説明:

https://www.codeproject.com/Articles/999238/Efficient-Message-Correlation-in-MSMQ

これは、パフォーマンス上の理由のために悪名高い悪いReceiveByCorrelationId()オペレーションとCorrelationIdをヘッダを使用することに基づきます。

これを行うための別の方法は、WCFを使用している、しかし、これはまだSystem.Messagingを使用して手動で応答に依存しています:

https://msdn.microsoft.com/en-us/library/ms751435(v=vs.110).aspx

さらなるアプローチは、WCFとDuplex MSMQと呼ばれるヘルパーライブラリを使用しています。

https://www.codeproject.com/Articles/41907/WCF-Duplex-MSMQ

しかし、これらの方法はいずれも、非常に素晴らしいではない、すべてが不必要な複雑さを紹介します。

は私がリモート・キュー

に確認の配信を必要とする私たちは、あなたが「確認」によって何を意味するかであることを理解するために必要なものと思います。トランザクションキューを使用すると、あるアプリケーションから別のアプリケーションへのメッセージ送信時に保証された配信セマンティクが提供されます。

一方、リアルタイム応答が必要な場合は、メッセージキューを使用するのはおそらくあなたの目的に適した技術ではありません。

MSMQを強制的に使用すると、市販の製品を使用するよりも悪化する可能性があります。私はNServiceBusを広く使用しました。これはMSMQを使用しますが、要求 - 応答などの強力なメッセージ交換パターンを追加します。これは有料の製品ですが、シングルスレッド操作のみが必要な場合は、無料のバージョンを使用できます。私は何を必要とすることは成功のためのリアルタイム応答したとのメッセージを失敗

..

私はこれを正しく理解していれば、その後、あなたの要件はMSMQはサポートしています確認、です。参照:大きな反響だ

https://msdn.microsoft.com/en-us/library/ms978430.aspx#bdadotnetasync2_topic4

https://msdn.microsoft.com/en-us/library/ms707129(v=vs.85).aspx

+0

を。 はい、あなたは正しいです。私は "Comfirmed Delivery"のためのトランザクションキューを使用しています。私が必要としたのは、成功と失敗のメッセージのリアルタイム応答でした。そのため、キューにもっと多くのメッセージを送ることをやめることができます。 あなたが言及した最初のcodeprojectの記事は私のシナリオでは適切ではありません。メッセージのコンシューマは、ターゲットキューから読み取るWindowsサービスです。そのキューのCorrelationIDを持つメッセージを待つと、メッセージが最初に取り出される競合状態に入ることができ、メッセージを待つことになります。 – Xlr8

+0

@ Xlr8 - なぜキューイングされたトランスポートが必要ですか?また、あなたはリクエストリプライについて話していますか、または単に承認を必要としていますか? –

+0

私は要求 - 応答が必要です。私はメッセージが受信されるか拒否されるまで待つべきです。 私はMSMQが切断されたシステムのためのものであることを知っていますが、私の場合、システムがオンラインであると仮定しましょう。 – Xlr8

関連する問題