2011-02-02 16 views
2

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

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

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

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

私は問題が、同期要求による応答を模倣した提案された設計であり、ここでは、相関法による受信を使用することが問題であると考えます。現在のアーキテクチャでは、アウトバウンド・キューはリモート・ホスト上に存在し、これを読み取って、それが問題であるかどうかを確認しています。

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

+0

シナリオもここで説明http://tinyurl.com/4d3uhpg – flalar

答えて

2

リモート受信の実行はRPCを使用しています。大丈夫なはず。 カーソルを使用して追加すると(この場合は、希望する相関IDを持つメッセージのキューを検索するために)、パフォーマンスは確かにあまりうまくスケールされません。多くのクライアントは通常、より多くのメッセージと、カーソルがさらに移動しなければならないので、押し下げてください。 ローカルキューでこのような検索を行うことをお勧めします。

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

乾杯
が ジョンBreakwell