2

クライアントと通信するコアシステムと、MSMQを介して非同期する他の内部システムがあります。クライアントはSMSを送信する携帯電話であり、他のシステムにはMQアダプターがあるため、これは最適です。また、これらの通信プロセスはデフォルトで非同期です。

現在、同期通信スタイルをデフォルトにする必要がある他のシステムをサポートする必要があります。この典型的な例は、HTTPを介したrpcスタイルの要求/応答通信をサポートするハンドヘルドデバイスです。

これらのクライアントから受信したメッセージをcorrelationIdを使用してインバウンドキューにプッシュし、アウトバウンドキューで同じcorrelationIdを使用するメッセージを探すHTTP「プロキシ」/エンドポイントを追加することで、これをサポートするソリューションの提案があります。うまくいけば、メッセージの処理が完了し、予想されるcorrelationIdを持つメッセージがアウトバウンドキューに存在します。これは、要求応答を模倣するためにメッセージをコアシステムにプッシュしたのと同じスレッドで発生します。

ただし、correlationId(MessageQueue.ReceiveByCorrelationId)でメッセージを受信すると、パフォーマンスが低下することがわかります。システムの速度を実際に遅くするのに、多くのクライアントスレッドは必要ありません。

問題は、receivebycorrelationidアプローチを使用して同期要求/応答を模倣する提案された設計がここでの問題であると推測します。現在のアーキテクチャでは、アウトバウンドキューはリモートホストに存在し、これを読み取って、それが問題であるかどうかを確認しています。

これを解決するための他のアプローチはありますか?論理的な意味は、アウトバウンドキューからデータベースまたは単一の受信プロセスからの何かにメッセージを詰め込み、対応するcorrelationIdを持つメッセージを検索することだと思います。

4

1 に答える 1

2

リモート受信の実行は RPC を使用し、特に高速ではありませんが、問題ないはずです。カーソルの使用を追加すると (この場合、目的のcorrelationID を持つメッセージをキューで検索するために)、パフォーマンスは明らかにあまりうまくスケーリングされません。カーソルをさらに移動する必要があるためです。この種の検索をローカル キューで実行することは間違いありません。

送信キュー内のメッセージをマルチキャストするバックエンドを取得するのはどうですか? 次に、通常はアウトバウンド キュー メッセージをリモートで受信するすべてのサーバーに、ID 照合のためにローカル キューに入るコピーを代わりに送信できます。

乾杯
ジョン・ブレイクウェル

于 2011-02-02T16:33:13.653 に答える