クライアントと通信するコアシステムと、MSMQを介して非同期する他の内部システムがあります。クライアントはSMSを送信する携帯電話であり、他のシステムにはMQアダプターがあるため、これは最適です。また、これらの通信プロセスはデフォルトで非同期です。
現在、同期通信スタイルをデフォルトにする必要がある他のシステムをサポートする必要があります。この典型的な例は、HTTPを介したrpcスタイルの要求/応答通信をサポートするハンドヘルドデバイスです。
これらのクライアントから受信したメッセージをcorrelationIdを使用してインバウンドキューにプッシュし、アウトバウンドキューで同じcorrelationIdを使用するメッセージを探すHTTP「プロキシ」/エンドポイントを追加することで、これをサポートするソリューションの提案があります。うまくいけば、メッセージの処理が完了し、予想されるcorrelationIdを持つメッセージがアウトバウンドキューに存在します。これは、要求応答を模倣するためにメッセージをコアシステムにプッシュしたのと同じスレッドで発生します。
ただし、correlationId(MessageQueue.ReceiveByCorrelationId)でメッセージを受信すると、パフォーマンスが低下することがわかります。システムの速度を実際に遅くするのに、多くのクライアントスレッドは必要ありません。
問題は、receivebycorrelationidアプローチを使用して同期要求/応答を模倣する提案された設計がここでの問題であると推測します。現在のアーキテクチャでは、アウトバウンドキューはリモートホストに存在し、これを読み取って、それが問題であるかどうかを確認しています。
これを解決するための他のアプローチはありますか?論理的な意味は、アウトバウンドキューからデータベースまたは単一の受信プロセスからの何かにメッセージを詰め込み、対応するcorrelationIdを持つメッセージを検索することだと思います。