Qual outra solução eu tenho para esse problema?
Use
LISTEN
e NOTIFY
para informar ao seu aplicativo que as coisas mudaram. Você pode enviar o
NOTIFY
de um gatilho que também registra alterações em uma tabela de filas. Você precisará de uma conexão PgJDBC que tenha enviado um
LISTEN
para o(s) evento(s) que você está usando. Ele deve pesquisar o banco de dados enviando consultas vazias periódicas (""
) se você estiver usando SSL; se você não estiver usando SSL, isso pode ser evitado usando as verificações de notificação assíncrona. Você precisará desembrulhar a Connection
objeto do seu pool de conexões para poder converter a conexão subjacente para um PgConnection
para usar ouvir/notificar com. Ver resposta relacionada A parte do produtor/consumidor será mais difícil. Para ter vários consumidores simultâneos à prova de falhas no PostgreSQL, você precisa usar o bloqueio consultivo com
pg_try_advisory_lock(...)
. Se você não precisa de consumidores simultâneos, é fácil, basta SELECT ... LIMIT 1 FOR UPDATE
uma linha de cada vez. Espero que o 9.4 inclua um método mais fácil de pular linhas bloqueadas com
FOR UPDATE
, pois há trabalho em desenvolvimento para isso.