システムのメッセージ フローを設計する際に、どの方法を採用するかを決めるのに少し苦労しました。
当社のビジネス プロセス (運送費の計算など) は変動しやすいため、その場でプロセスを変更できるワークフロー フレームワークを使用しています。
一般的なプロセスは次のようになり
ます。インターフェースは、顧客が提供するインターフェース (Web サービス、TCP エンドポイント、データベース ポーリング、ファイルなど) を介して顧客システムに接続するサービスです。次に、受信したデータと実行するワークフローの ID を含むコマンドが executor に送信されます。
最初の問題は、複数のワーカー サービスに負荷を分散させたい場合です。
小包ラベルの印刷、価格の計算、通知メールの送信など、さまざまなプロセスがあるとします。大量の郵送ワークフローが実行されるため、ラベルの印刷が遅れることはありません。そのため、実行する作業に基づいて、さまざまなワーカーにコマンドをルーティングできるようにしたいと考えています。
すべてのコマンドは「ワークフロー XY の実行」に似ているため、独自のコンテンツ ベースのルーティングを実装する必要があります。ほとんどの場合、これはアンチ パターンであるため、NServicebus はそのままではこれをサポートしません。
異なるメッセージ タイプを使用してメッセージをルーティングできない場合、これを行うためのより良い方法はありますか?
2 つ目の問題は、監視を追加するときに発生します。エンドポイントはメッセージ タイプごとに 1 つのキューにしかサブスクライブできないため、すべてのエグゼキュータに「ワークフローを完了しました」というメッセージだけを発行させることはできません。現在の解決策はBus.Send
、事前に構成された監査エンドポイントへのメッセージです。これは私には少し浮気のように感じます;)
複数のワーカーの発行されたメッセージを 1 つのキューに再度統合するより良い方法はありますか? 問題#1がない場合、すべてのワーカーが同じ入力キューを使用できると思いますが、このシナリオではこれは不可能です.