8

今後のプロジェクトで非同期実行を行うためのソリューションとして MSMQ を使用することを検討しています。WCF と MassTransit などのフレームワーク、または手書きの MSMQ クライアントを使用して、MSMQ からタスクを配置/読み取りすることの違いを知りたいです。

基本的に、アプリケーションは複数の Web サイト (LAN を介した内部またはインターネットを介した外部) であり、サービス層 (WCF または通常の Web サービス) を介してデータを読み書きします。次に、このサービス レイヤーは次の 2 つのいずれかを実行します。1. データベースにデータを書き込む 2. メッセージをキューに入れることでバックグラウンド プロセスをトリガーします。3. 明らかに、データベースからデータを取得することもできます。キューの反対側にある小さなエージェント (Windows サービス) は、キューを監視し、タスク コマンドに基づいて実行します。

このアーキテクチャは、スケーリング (キューとエージェントの追加) が非常に簡単で、RPC や分散実行などに比べて実装が簡単です。また、エージェントの処理はリアルタイムである必要はありません。また、エージェントとサービス層は、共通のドメイン オブジェクトとリポジトリなどを共有することを除いて、別個のアプリケーションです。

どう思いますか?上記の要件に対するアーキテクチャの提案を歓迎します。ありがとうございました!

4

3 に答える 3

7

WCF は、MSMQ に抽象化を追加します。実際、互換性のあるコントラクト (操作は OneWay である必要があります) を定義すると、設定で MSMQ を透過的に切り替えることができます。(たとえば、通常の HttpWS または NetTcp バインディングに切り替えることができます。)

セキュリティなどの他の WCF の利点を評価して、それらがニーズにどのように適合するかを確認する必要があります。繰り返しますが、これらは、MSMQ を使用しているという事実を十分に透過的にする必要があります。たとえば、SOAP セキュリティの追加などは、MSMQ の使用とは関係なく、「問題なく機能する」はずです。

(ただし、IIRC では、マシンのローカル プロファイルで証明書を生成するために、MSMQ を使用するサービス アカウントを使用して、 MSMQ を使用する各マシンのデスクトップにログインする必要があります。ユーザー プロファイルが読み込まれないため、IIS6. 一般的には非常に面倒ですが、特に WCF とは関係ありません。)


それとは別に:

SQL Server Service Broker を見たことがありますか? MSMQ + WCF と SSSB を使用した後、SSSB は構成と管理が非常に簡単だと思います。SSSB は、任意の SQL クライアントで T-SQL コマンドを使用して動作します (私は Linux 上の Mono からトランザクションを使用して使用します)。また、リモートでもトランザクションの送受信が可能になります (MSMQ 4 ではこれが可能になったと思います)。メッセージ キューイングの手間が大幅に軽減されます。既に SQL Server を使用している場合は...

SQL Management Studio にはすべての GUI デザイナーがいないため、SSSB は見落とされることがよくありますが、難しくはなく、優れたオプションです。1 つの欠点は、ローカル送信機能 (つまり、ネットワークがダウンしているときにメッセージをキューに入れる) が必要な場合は、ローカル SQL Express インスタンスを実行する必要があることです。

于 2009-03-06T18:09:23.363 に答える
2

あなたのアーキテクチャは健全で合理的​​です。ただし、ハンド コーディングされた MSMQ クラスよりも WCF ネット MSMQ トランスポートを使用することを検討する必要があります。WCF は、この共通機能を優れたプログラミング モデルにラップします。また、基本的な System.Messaging と比較して、wcf で使用されるプロトコルにいくつかの改善があると思います

于 2009-03-06T08:48:09.093 に答える
1

プレーンな MSMQ に対する付加価値をご覧ください。

http://readthedocs.org/docs/masstransit/en/latest/overview/valueadd.html

要約すると、MassTransit を使用した API では、多くのメッセージングの概念が明確に示されています。手作業でコーディングしたり、WCF を使用したりした場合には得られない程度です。

于 2012-04-26T18:15:05.080 に答える