Solusi apa lagi yang saya miliki untuk masalah ini?
Gunakan LISTEN
dan NOTIFY
untuk memberi tahu aplikasi Anda bahwa banyak hal telah berubah.
Anda dapat mengirimkan NOTIFY
dari pemicu yang juga mencatat perubahan dalam tabel antrian.
Anda memerlukan koneksi PgJDBC yang telah mengirimkan LISTEN
untuk acara yang Anda gunakan. Itu harus polling database dengan mengirimkan kueri kosong berkala (""
) jika Anda menggunakan SSL; jika Anda tidak menggunakan SSL, hal ini dapat dihindari dengan menggunakan pemeriksaan notifikasi asinkron. Anda harus membuka Connection
objek dari kumpulan koneksi Anda untuk dapat mentransmisikan koneksi yang mendasarinya ke PgConnection
untuk menggunakan mendengarkan/memberi tahu dengan. Lihat jawaban terkait
Bit produsen/konsumen akan lebih sulit. Untuk memiliki beberapa konsumen serentak yang aman dari gangguan di PostgreSQL, Anda perlu menggunakan penguncian penasehat dengan pg_try_advisory_lock(...)
. Jika Anda tidak membutuhkan konsumen bersamaan maka mudah, Anda cukup SELECT ... LIMIT 1 FOR UPDATE
berturut-turut.
Semoga 9.4 akan menyertakan metode yang lebih mudah untuk melewatkan baris terkunci dengan FOR UPDATE
, karena ada pekerjaan dalam pengembangan untuk itu.