2013-03-19 73 views
11

我有一個PostgreSQL數據庫。我想要做的是,檢測數據庫中發生的任何更改(插入,更新),然後調用Web服務。我怎麼能這樣做?Postgresql - 檢測更改並調用webservice

在此先感謝您的幫助。

+0

Apache的駱駝還提供了一個控制PostgreSQL [運輸](http://camel.apache.org/transport.html)。您可以使用[JavaDSL](http://camel.apache.org/java-dsl.html)創建路線。結合NOTIFY,這可能會起作用。 – koppor 2016-09-14 12:09:33

+0

相關問題[通知postgres對java應用程序的更改](http://stackoverflow.com/q/18126178/873282) – koppor 2016-09-14 12:11:41

回答

8

您應該能夠使用觸發器和listen/notify functionality in PostgreSQL實現這樣的事情:

  1. 一組插入/更新/刪除triggers創建通知事件一旦有事情發生在你的表,使用創建/更改/刪除ID作爲有效載荷。

  2. 後臺進程定期檢查通知(here's an example using Java/JDBC),然後從數據庫加載更改的記錄以執行Web服務調用。

這是不以任何方式實時推式系統,但你必須輪詢數據庫通知事件來觸發Web服務調用。儘管如此,它會做的。

PostgreSQL的
+1

如果通知不使用SSL,則Java客戶端可以對通知進行僅客戶端輪詢。請參閱http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/PGConnection.html#getNotifications()。如果您使用的是SSL,那麼PgJDBC不能異步接收通知,您必須通過發送空查詢或「SELECT 1;」進行輪詢。如果你使用客戶端輪詢,你可以很快地進行輪詢,而且它幾乎是實時的。這適用於大多數語言的數據庫驅動程序,而不僅僅是PgJDBC。 – 2013-03-19 23:50:56

+0

順便說一下,使用'LISTEN'和'NOTIFY'確實是正確的方法。可以使用'plpythonu','plperlu'等觸發器直接從數據庫內部調用Web服務,但(a)它不是事務性的,並且(b)它會對數據庫的性能造成可怕的影響,特別是如果Web服務速度緩慢或無法響應。 – 2013-03-19 23:53:34

+0

雖然我建議將創建,插入和刪除操作記錄到歷史記錄表中,併發送一個無負載通知,告訴客戶端某些內容已添加到歷史記錄表中。更強大,更快。 – 2013-03-19 23:54:32