私は非常に大きなアプリケーションを構築することを計画しています (機能ではなく、同時ユーザー/リクエスト数の点で大きい)。
基本的に、コマンドが実行されるのを待っているサービスをどこかに用意し、後で完了を確認します。このサービスはサービス バスを使用して通信し、確認メッセージが発行される前に実行を最終的に行います。
このサービスのコンシューマーは、あらゆる種類のアプリケーション (WPF、SL、...) にすることができますが、私のメイン (および最初の) クライアントは、asp.net MVC アプリケーション + WebApi (.Net 4.5) または MVC のみ (.Net 4.0 ) ajax コントローラー アクションを使用します。
Web アプリケーションは、Ajax 呼び出しに依存して、ユーザー フレンドリーな応答性の高いアプリケーションを維持します。
私はこのような完全な非同期アーキテクチャにまったく慣れていないため、将来の頭痛の種を避けるためにいくつか質問があります。
- 私の Web API 呼び出しには時間がかかる場合があります。長時間実行される操作 (ある種の非同期?) をサポートするために、API を適切に設計するにはどうすればよいですか? 新しい async キーワードについて読んだことがありますが、知識のために、背後にあるものを理解したいと思います。
- サービスへの私の呼び出しは、メッセージを公開し、ack メッセージを待つことで構成されます。これを単一のメソッドにラップする場合、このメソッドをどのように記述すればよいですか? ACK を受信するまで「ブロック」する必要がありますか (すべきではないと思います)。Task オブジェクトを返して、消費者に決定させるべきですか?
- また、SignalR が役立つかどうかも疑問です。signalR を使用すると、実際の「ファイア アンド フォーゲット」コマンドを発行して、クライアントにルーティングしてメッセージを確認できると思います。
- 私は完全に話題から外れていますか?別のアプローチを取るべきですか?
実装の詳細/フレームワークに関しては、次を使用すると思います。
- メッセージング システムとしての Rabbitmq
- メッセージング システムを抽象化する Masstransit
- UIを構築するためのasp.MVC 4
- コマンド発行をUIコントローラーから分離し、他の種類のクライアントがコマンドを発行できるようにするWebapi