Кое друго решение имам за този проблем?
Използвайте LISTEN
и NOTIFY
да кажете на приложението си, че нещата са се променили.
Можете да изпратите NOTIFY
от тригер, който също записва промени в таблица на опашката.
Ще ви трябва PgJDBC връзка, която е изпратила LISTEN
за събитието/събитията, които използвате. Той трябва да анкетира базата данни, като изпраща периодични празни заявки (""
) ако използвате SSL; ако не използвате SSL, това може да бъде избегнато чрез използване на проверки за асинхронни известия. Ще трябва да развиете Connection
обект от вашия пул за връзки, за да можете да прехвърлите основната връзка към PgConnection
да използвате слушане/уведомяване с. Вижте свързания отговор
Битът производител/потребител ще бъде по-труден. За да имате няколко едновременни потребители, безопасни при сривове в PostgreSQL, трябва да използвате съветно заключване с pg_try_advisory_lock(...)
. Ако не се нуждаете от едновременни потребители, тогава е лесно, просто SELECT ... LIMIT 1 FOR UPDATE
ред по ред.
Надяваме се, че 9.4 ще включва по-лесен метод за пропускане на заключени редове с FOR UPDATE
, тъй като има работа в процес на разработка.