2009-08-21 10 views
1

外部イベントが発生していないため、特定のメッセージが処理されないNServiceBusアプリケーションがあります。この他のイベントはNSBイベントではないので、サガを適切に実装することはできません。NServiceBus遅延メッセージ処理

しかし、(外部イベントが発生するまでループを引き起こす)メッセージを再キューイングするのではなく、メッセージを別のメッセージ(DelayMessage)にラップして代わりにキューに入れます。 DelayMessageは、別のサービスによって取得され、再試行間隔が切れるまでデータベースに格納されます。この時点で、遅延サービスはメッセージを元のキューに再キューイングし、別の試みを行うことができます。

ただし、この外部イベントがまだ発生していない場合は、複数回発生する可能性があります。その場合でも、メッセージが発生する往復回数を制限したいと考えています。つまり、DelayMessageにはMaxRetriesプロパティがありますが、遅延サービスが再試行のために元のメッセージをキューに入れたときに失われます。

その他のオプションはありますか?私はこの問題に対する全く異なる解決策があることを受け入れてうれしいです。

答えて

4

最初のメッセージを格納するsagaの実装を検討し、2番目のメッセージが到着するまで保持してください。また、サガがtimeoutを開くようにして、2番目のメッセージが失われた場合にプロセスが無期限に待機しないようにすることもできます。

+0

うわー、マン自身 - ありがとう!私は本当にサガを使用することはできませんが、私は考えていません。メッセージは1つしかありません。処理できるようになるには、データベースにデータが必要です。実際には私が佐賀に組み立てることができるメッセージは2つありません。データは従来のストアドプロシージャによって作成されていますが、NSBを使用してそれを参照する追加データを追加しています。 –

+0

次に、砂漠のタイムアウトを使用して、データベースにデータがあるかどうかを確認します。単純なポーリングメカニズムを提供します。データがない場合は、別のタイムアウトを要求します。 –

関連する問題