私たちは、そのクライアントおよび他の内部システムとMSMQを介して通信するコアシステムを持っています。これは、クライアントがSMSを送信する携帯電話であり、他のシステムにMQアダプタがあるため、適切です。これらの通信プロセスもデフォルトでは非同期です。MSMQ ReceiveByCorrelationID
ここで、同期通信スタイルを必要とする他のシステムをサポートする必要があります。これの典型的な例は、ハンドヘルドデバイスであり、HTTPを介したrpcスタイルの要求/応答通信をサポートします。
これらのクライアントから受信したメッセージをcorrelationIdを使用してインバウンド・キューにプッシュするHTTPの「プロキシ」/エンドポイントを追加し、同じ相関IDを持つメッセージをアウトバウンド・キューで検索するというソリューション提案がありました。うまくいけば、メッセージの処理が完了し、期待されるcorrelationIdを持つメッセージがアウトバウンド・キューに存在することを望みます。これは、要求応答を模倣するためにメッセージをコアシステムにプッシュしたのと同じスレッドで発生します。
ただし、correlationId(MessageQueue.ReceiveByCorrelationId)でメッセージを受信すると、パフォーマンスが低下することがわかります。実際にシステムの速度を落とすために、多くのクライアントスレッドは必要ありません。
私は問題が、同期要求による応答を模倣した提案された設計であり、ここでは、相関法による受信を使用することが問題であると考えます。現在のアーキテクチャでは、アウトバウンド・キューはリモート・ホスト上に存在し、これを読み取って、それが問題であるかどうかを確認しています。
これを解決する他の方法はありますか?私は論理的な問題は、アウトバウンドキューからデータベースへのメッセージや単一の受信プロセスから何かを詰め込み、対応するcorrelationIdを持つメッセージを検索することになると思います。
シナリオもここで説明http://tinyurl.com/4d3uhpg – flalar