ドメイン駆動設計 境界のあるコンテキストを分離するためにイベントを渡す
MVC のユーザー アクションは、リモート (同じ LAN) イベント ハンドラーに渡されるイベントを生成する必要があります。
私がテストしたこと:
- MVC: サービス呼び出しを起動して忘れる (非同期) ->
- (IIS がホスト) データを収集してメッセージを入力する WCF ->
- EasyNetQ/RabbitMQ ServiceBus 経由で送信 ->
- イベントは、イベントとそのデータを処理するサブスクライバー (WCF サービス エンドポイントから初期化された DI コンテナーを使用) によって消費されます。
MVC側でループすることでサービスがかなり速く呼び出された場合にどのように機能するかを確認するためにいくつかのテストを行いました
for (int i = 0; i < 200; i++)
{
...
client.MyServiceMethod(someId, startDate);
...
}
MessageQueue 部分は、キューに送信され、同じ秒内にサブスクライバーによって受信されるタイムスタンプに基づいて高速です。WCF サービス呼び出しのループは非常に低速です。それらをループするのに数秒かかります。wsHttpBinding から netTcpBinding に切り替えて、WCF で serviceThrottling をいじってみました。
WCF は必須ではありませんが、別のイベント処理プロジェクト (パブリッシャー側) が有益であり、MVC アプリの別の場所に物理的に配置できるようです (負荷の軽減など)。このような状況で WCF はもっともらしいですか、または Windows サービスまたは他の自己ホスト型のコンソール アプリなどを使用するか、MVC のスレッドを使用してイベント データを生成する可能性がありますか、またはより良いシナリオがありますか? このタイプのイベント処理システムのベスト プラクティスは何ですか? 基本的に、エンド ユーザーが使用している UI の速度を落とさずにどこかで処理する必要があるため、イベント データを生成する何かがあれば有益であるように思われます。