0

プロセス A は、オブジェクト a1、a2、a3 などの値を計算し、結果をミドルウェア キュー (RabbitMQ) に送信しています。コンシューマーはキューを読み取り、これらの結果をさらに処理します。プロセス A は定期的にこれらの値のスナップショットを送信する必要があるため、コンシューマーは他の計算を行うことができます。これらのオブジェクトの値は、個別に変更される場合があります。キューは次のようになります a1、a1、a2、a1、a2、a2、a3... コンシューマーはキュー内の各アイテムを処理します。スナップショットにはすべてのオブジェクトが含まれている必要があり、コンシューマーはすべてのオブジェクトについてこのメッセージを一度に処理します。

したがって、要件は次のようなキューを持つことです:a1、a1、a3、a2、a2、[スナップショット、a1、a2、a3]、a3、a1 ...問題は、これらのアイテムが異なるタイプであることです:1つのタイプスナップショットの a1、a2 などのオブジェクトの場合。これは、異なるキューで処理する必要があることを意味しますが、その場合、競合状態が発生します。コンシューマーは、スナップショットを処理する前にオブジェクトを処理する可能性があります。

この(非常に一般的な)問題を解決するパターンはありますか? メッセージのキューイングには RabbitMQ を使用しています。

4

1 に答える 1

0

コンシューマごとに 1 つのキューとコンテンツ タイプ プレフィックスを使用して、配信されるメッセージのタイプを示します。AMQP メッセージに「タイプ」属性があるかもしれないと思いますが、私はそれを使用したことがないので、この問題に適用できるかどうかはわかりません。

于 2010-04-07T13:12:17.243 に答える