0

メモリではなくディスクにキューイングする BlockingQueue の機能を探しています。重いソリューション (JMS など) は避けたいと思います。理想的には、JVM 上のクライアント (プロデューサー) およびコンシューマーと同じプロセスでキューを実行する必要があります。コンシューマが停止してもキューイングを続行でき、再起動後も存続できる必要があります。

4

1 に答える 1

1

リレーショナルテーブルの上でそれをハッキングするのはどうですか?このアプローチにはいくつかの利点があります。

これはアンチパターンである可能性があり、場合によってはそうであることもあります。落とし穴があります(特に、特別な注意を払わないと競合が発生する可能性があります)。

ただし、意味のある利点もあります。キューデータを他のデータと統合でき、ACIDセマンティクスを取得し、一貫したバックアップを取得できます(同時にバックアップできないため、外部キューでは取得できません)。 DBとして)、プロジェクトで新しいテクノロジーを使用して保存します。

各キューアイテムにステータスとインデックスを割り当てます。

簡単な競合管理手法は次のとおりです。各キュー行に乱数を追加します。デキューするときは、を要求しselect TOP 1 * from QueueTable where RandomNumberColumn > RAND() order by RandomNumberColumnます。これにより、ランダムな位置からアイテムを取得できるため、Xロックによるブロッキングが大幅に減少します。

于 2012-12-13T20:08:42.080 に答える