メモリではなくディスクにキューイングする BlockingQueue の機能を探しています。重いソリューション (JMS など) は避けたいと思います。理想的には、JVM 上のクライアント (プロデューサー) およびコンシューマーと同じプロセスでキューを実行する必要があります。コンシューマが停止してもキューイングを続行でき、再起動後も存続できる必要があります。
1 に答える
1
リレーショナルテーブルの上でそれをハッキングするのはどうですか?このアプローチにはいくつかの利点があります。
これはアンチパターンである可能性があり、場合によってはそうであることもあります。落とし穴があります(特に、特別な注意を払わないと競合が発生する可能性があります)。
ただし、意味のある利点もあります。キューデータを他のデータと統合でき、ACIDセマンティクスを取得し、一貫したバックアップを取得できます(同時にバックアップできないため、外部キューでは取得できません)。 DBとして)、プロジェクトで新しいテクノロジーを使用して保存します。
各キューアイテムにステータスとインデックスを割り当てます。
簡単な競合管理手法は次のとおりです。各キュー行に乱数を追加します。デキューするときは、を要求しselect TOP 1 * from QueueTable where RandomNumberColumn > RAND() order by RandomNumberColumn
ます。これにより、ランダムな位置からアイテムを取得できるため、Xロックによるブロッキングが大幅に減少します。
于 2012-12-13T20:08:42.080 に答える