サブオーケストレーションを開始するためにマスターオーケストレーションは必要ないと思います。コンボイパターンを実装するマスターオーケストレーションについて話しているのではないと思います。それで、もしそうなら、私ができることは次のとおりです。
ここに、シングルトン オーケストレーションを実装する方法の簡単な例があります。この例は、一度しか存在しないオーケストレーションをセットアップする方法を示しています。そこに送られるすべてのメッセージは、受信順に並べられ、一度に 1 つずつ処理されます。あなたの例は、これを顧客 ID で実行したいという点で異なります。これは非常に簡単です。受信メッセージで顧客 ID をプロモートし、それを相関タイプに追加します。これで、オーケストレーションのインスタンスは顧客ごとに 1 つだけになります。
シングルトンの問題はこれです。ある時点でそれらを殺さなければなりません。だから、あなたはそれらを終わらせる必要があります。特定の顧客への最後のメッセージが、属性などを通じて死ぬ時が来たことをオーケストレーションに知らせる方法がある場合、これを行うことができます。これが不可能な場合は、タイマーを設定する必要があります。x 秒以内にメッセージが受信されない場合は、orch を終了します。これはすべて簡単に行うことができますが、ゾンビを導入することができます. ゾンビは、そのオーケストレーションがシャットダウンされているときに、その顧客への別のメッセージが届いたときに発生します。これは通常、待機時間を微調整することで解決できます。とにかく、時折ゾンビを引き起こします。
フィールドからのメモ。私たちはこれを行ってきましたが、これは実際には優れた長期的な解決策ではありません. 顧客情報の更新を受け取っていたため、注文処理を確実にする必要がありました。私たちはこのシングルトン アプローチを行いましたが、ゾンビの問題と例外の問題から問題がありました。シングルトン オーケストレーションが例外をスローすると、その顧客に対する今後のすべてのメッセージの処理がブロックされます。そのため、考えられるすべての例外を処理します。本当の解決策は、遠端のシステムに更新メッセージのタイム スタンプをチェックさせ、最後の更新よりも古いメッセージを破棄させることでした。私たちはこの方法で行きたかったのですが、受信システムはこの余分な作業をしたくありませんでした。