この問題に対して他にどのような解決策がありますか?
LISTEN
を使用する およびNOTIFY
状況が変わったことをアプリに伝えます。
NOTIFY
を送信できます キューテーブルの変更も記録するトリガーから。
LISTEN
を送信したPgJDBC接続が必要です 使用しているイベントの場合。定期的に空のクエリ(""
)を送信してデータベースをポーリングする必要があります )SSLを使用している場合。 SSLを使用していない場合は、非同期通知チェックを使用することでこれを回避できます。 Connection
のラップを解除する必要があります 接続プールのオブジェクトを使用して、基になる接続をPgConnection
にキャストできるようにします。 でlisten/notifyを使用します。関連する回答を見る
プロデューサー/コンシューマービットはより難しくなります。 PostgreSQLで複数のクラッシュセーフな同時コンシューマーを使用するには、pg_try_advisory_lock(...)
でアドバイザリロックを使用する必要があります。 。同時コンシューマーが必要ない場合は簡単です。SELECT ... LIMIT 1 FOR UPDATE
一度に1行ずつ。
うまくいけば、9.4には、FOR UPDATE
でロックされた行をスキップする簡単な方法が含まれるでしょう。 、開発中の作業があるため。