¿Qué otra solución tengo para este problema?
Usa LISTEN
y NOTIFY
para decirle a su aplicación que las cosas han cambiado.
Puedes enviar el NOTIFY
desde un disparador que también registra cambios en una tabla de cola.
Necesitará una conexión PgJDBC que haya enviado un LISTEN
para los eventos que está utilizando. Debe sondear la base de datos enviando consultas periódicas vacías (""
) si está utilizando SSL; si no está utilizando SSL, esto se puede evitar mediante el uso de las comprobaciones de notificación asíncronas. Deberá desenvolver la Connection
objeto de su grupo de conexiones para poder convertir la conexión subyacente a un PgConnection
para usar escuchar / notificar con. Ver respuesta relacionada
La parte productor/consumidor será más difícil. Para tener varios consumidores simultáneos a prueba de fallas en PostgreSQL, debe usar el bloqueo de aviso con pg_try_advisory_lock(...)
. Si no necesita consumidores simultáneos, entonces es fácil, simplemente SELECT ... LIMIT 1 FOR UPDATE
una fila a la vez.
Con suerte, 9.4 incluirá un método más fácil para omitir filas bloqueadas con FOR UPDATE
, ya que hay trabajo en desarrollo para ello.