Tôi có giải pháp nào khác cho vấn đề này?
Sử dụng LISTEN
và NOTIFY
để nói với ứng dụng của bạn rằng mọi thứ đã thay đổi.
Bạn có thể gửi NOTIFY
từ trình kích hoạt cũng ghi lại các thay đổi trong bảng hàng đợi.
Bạn sẽ cần kết nối PgJDBC đã gửi LISTEN
cho (các) sự kiện bạn đang sử dụng. Nó phải thăm dò cơ sở dữ liệu bằng cách gửi các truy vấn trống định kỳ (""
) nếu bạn đang sử dụng SSL; nếu bạn không sử dụng SSL, điều này có thể tránh được bằng cách sử dụng kiểm tra thông báo không đồng bộ. Bạn sẽ cần mở Connection
đối tượng từ nhóm kết nối của bạn để có thể truyền kết nối cơ bản tới một PgConnection
để sử dụng nghe / thông báo với. Xem câu trả lời liên quan
Nhà sản xuất / người tiêu dùng sẽ khó hơn. Để có nhiều người tiêu dùng đồng thời an toàn với sự cố trong PostgreSQL, bạn cần sử dụng khóa tư vấn với pg_try_advisory_lock(...)
. Nếu bạn không cần người tiêu dùng đồng thời thì thật dễ dàng, bạn chỉ cần SELECT ... LIMIT 1 FOR UPDATE
một hàng tại một thời điểm.
Hy vọng rằng 9.4 sẽ bao gồm một phương pháp dễ dàng hơn để bỏ qua các hàng bị khóa với FOR UPDATE
, vì nó đang được phát triển.