2

SQL Server との統合のために、XML シリアル化されたメッセージで Rebus SQLTransport を使用しています。メッセージは、SQL Server で行われた変更を表します。そのため、メッセージ配信の順序は不可欠です。

これは、たとえば、メッセージ 1 に、メッセージ 2 で (ID によって) 参照されるオブジェクトが含まれている可能性があるためです。別の例として、メッセージ 1 には、メッセージ 2 からの新しいオブジェクトを受け入れるために必要なオブジェクトの削除要求が含まれている場合があります。

メッセージはトリガーによって生成されるため、メッセージを 1 つのメッセージに集約するのは非常に複雑です。

メッセージの冪等性と 1 つのワーカーがあれば、エラーが発生してメッセージがエラー キューに移動された場合に機能しないという事実を除いて、機能すると思います。検証またはビジネス ロジックの例外が原因で、エラーが発生する可能性は十分にあります。そのため、メッセージの問題を解決できるのは人間だけであり、それまでは他のメッセージは配信されるべきではないと私は信じています。その場合どうするのがベストなのか、アドバイスをいただきたいと思いました。私が見た限り、再試行回数を無限に設定することはできないので、問題が人間によって解決されるまでハンドラー内でサービスを停止する必要がありますか?

前もって感謝します

4

1 に答える 1

3

メッセージが「穴」のない順序で処理されることが重要な場合は、各メッセージにシーケンス番号を割り当てることをお勧めします。

このようにして、エンドポイントが予想されるシーケンス番号よりも大きいシーケンス番号を持つメッセージを取得した場合、例外をスローできるため、順不同のメッセージが処理されるのを防ぐことができます。

ただし、エラーがまれで、メッセージの量がかなり少ない場合にのみ、これを行います。

順序どおりの処理が必要な場合は、プルモデルをサポートする別のメッセージ処理ライブラリを使用する方がはるかに優れた設計になります。これは、Rebus のプッシュモデルよりもシナリオに適していると思います。

于 2014-11-12T20:08:03.087 に答える