nservicebus を使用したワークフロー プロセスの実装中に問題に直面しています。バージョン2.0.1329.2
を使用しており、実装しようとしているワークフローは非常に単純です。
計算する必要がある記事のリストがあります。ワークフローは、公開された最初のリストから始まります。その後、ユーザーは元のリストからいくつかの記事を追加または削除して他の公開を行うことができます。すべてのリストにはコード識別子があります。
リストのコードで識別されるオーケストレーション サービスを使用して実装しました。佐賀データには、リストが作成された記事のすべての参照もあります。
問題は、ユーザーが同じリストの別の公開中に記事のリストを公開すると、プロセス状態のロックがなく、このように同時実行制御はありませんが、後で終了するハンドラーには独自のデータが保持されます。
例えば:
- 追加する 10 個の記事を含むリストが時間 [t] に到着し、オーケストレーション サービスがデータベースから saga データをロードし、時間 [t + 5] に変更して保存します。
- 追加する項目が 1 つあるリストが時刻 [t+1] に到着すると、オーケストレーション サービスはデータベースから saga データをロードし、時刻 [t+4] に変更して保存します。
時間[t + 6]に6つの追加要素が必要ですが、5つの追加要素しか得られません..
動作は次のようにすべきだと思います: 同じリストに関連する場合、2 番目のメッセージは、最初のメッセージが終了するまでプロセス状態がロックされていることを検出する必要があります。
このため、ワークフロー プロセスの実装をサポートするようにオーケストレーション サービスが適切に作成されていないかどうか疑問に思っていますが、ワーカー スレッドの数を 1 つだけに設定すると、並列効率が失われます。