天天看點

PostgreSQL的notify 與listen (五)

磨砺技術珠矶,踐行資料之道,追求卓越價值 

回到上一級頁面: PostgreSQL基礎知識與基本操作索引頁     回到頂級頁面:PostgreSQL索引頁

利用PostgreSQL的notify /listen 機制,可以實作在psql用戶端看到通知消息。

但是,如果是Java 應用程式,将會是怎樣的?

按照PostgreSQL的官方文檔,是這樣說的:

​​http://jdbc.postgresql.org/documentation/91/listennotify.html​​

A key limitation of the JDBC driver is that it cannot receive asynchronous notifications and must poll the backend to check if any notifications were issued.

Java程式通過JDBC Driver,來被資料庫端資料變化/消息通知激活,是不能直接實作的。

隻不過是采用變通方式,還是要輪詢資料庫端,隻是"select 1"這種查詢,可以盡量使網絡通訊量較少。

摘要其關鍵代碼如下:

打個比方來說,劇場看門人和劇場經理是觀察者模式,劇場經理有了新劇目,他會通知看門人。

而你作為觀衆,沒必要老去打擾繁忙的劇場經理,隻要隔一段時間打電話給劇場看門人。

電話費比較貴(越洋國際電話10美刀/分鐘)是以,你給看門人打電話時,隻是簡單問候。

如果劇場看門人已經被劇場經理通知有新劇目,他會告訴你說有新戲某某!你就知道有新劇目了。

你作為觀衆就是 Java Thread      

電話裝置和電話線就是 JDBC Driver

你給看門人打電話就是 "select 1"  

看門人就是 libpq裡的 PGNotification

劇場經理就是 PostgreSQL背景伺服器程序

你的大老闆則是最終使用者。大老闆看來,下面的經理(Java Application)忙着向他彙報工作;

當國外劇場有新劇目的時候,花很少錢(你和看門人聯系,廢話從不多講),也沒有耽誤(電話都是你這個Java Thread 來用的) 工作,就知道了消息;于是大老闆坐飛機去悉尼看戲去也。