3

どちらも無限に実行され、タイムアウトに応答する 2 つの長時間実行サガがあります。1 つ目は 15 分ごとのタイムアウトにサブスクライブし、2 つ目は 24 時間ごとにサブスクライブします。各サガは自身の実行時間を追跡し、実行の開始時と完了時に他のサガに通知します。これらのサガが担当するバルク データ ロードは、データベースの競合のため同時に実行できません。

最初のサガ ( Saga A~15 分) が開始されると、最初に (内部変数を使用して) 2 番目のサガ ( Saga B~24 時間) が現在実行されているかどうかがチェックされます。そうでない場合は、処理手順を開始します (別のプロセスにシェルを実行し、時間をかけてポーリングして、いつ完了したかを確認します)。これら 2 つのサガは、開始時または完了時にメッセージを送信して相互に通信します。

何らかの理由で、これは2つのレベルで私には臭いようです:

  1. 基本的に、決して完成しないシングルトン サガがあります。これはそれ自体がアンチパターンですか?
  2. 状態を変更することのみを目的として、メッセージを双方向に送信しています。この種のシナリオを処理するためのより良い方法があるはずです。sendingNSB 4.0 のリリースに伴い、コマンド実行時にエラーが発生するようになりました。代わりに pub-sub アプローチを使用すると、エラーは解消されました。

これは NServiceBus 実装のアンチパターンと見なされますか? また、この種の要件に適したパターンはありますか?

4

1 に答える 1