PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Benachrichtigen von Postgres-Änderungen an der Java-Anwendung

Welche andere Lösung habe ich für dieses Problem?

Verwenden Sie LISTEN und NOTIFY um Ihrer App mitzuteilen, dass sich etwas geändert hat.

Sie können den NOTIFY senden von einem Trigger, der auch Änderungen in einer Warteschlangentabelle aufzeichnet.

Sie benötigen eine PgJDBC-Verbindung, die ein LISTEN gesendet hat für die Veranstaltung(en), die Sie verwenden. Es muss die Datenbank abfragen, indem es periodisch leere Abfragen sendet (""). ), wenn Sie SSL verwenden; Wenn Sie kein SSL verwenden, kann dies durch die Verwendung der asynchronen Benachrichtigungsprüfungen vermieden werden. Sie müssen die Connection entpacken -Objekt aus Ihrem Verbindungspool, um die zugrunde liegende Verbindung in eine PgConnection umwandeln zu können zu hören/benachrichtigen mit verwenden. Siehe zugehörige Antwort

Das Producer/Consumer-Bit wird schwieriger sein. Um mehrere absturzsichere Concurrent Consumer in PostgreSQL zu haben, müssen Sie Advisory Locking mit pg_try_advisory_lock(...) verwenden . Wenn Sie keine gleichzeitigen Verbraucher benötigen, ist es ganz einfach, SELECT ... LIMIT 1 FOR UPDATE eine Zeile nach der anderen.

Hoffentlich enthält 9.4 eine einfachere Methode zum Überspringen gesperrter Zeilen mit FOR UPDATE , da dafür noch Entwicklungsarbeit geleistet wird.