PostgreSQL的notify 与listen (五)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:
利用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"这种查询,可以尽量使网络通讯量较少。

摘要其关键代码如下:

复制代码
 1 while (true) {                
 2     try {            
 3       // issue a dummy query to contact the backend        
 4       // and receive any pending notifications.        
 5       Statement stmt = conn.createStatement();        
 6       ResultSet rs = stmt.executeQuery("SELECT 1");        
 7       rs.close();        
 8       stmt.close();        
 9                 
10      org.postgresql.PGNotification notifications[] = pgconn.getNotifications(); 11      if (notifications != null) {        
12          for (int i=0; i<notifications.length; i++) {    
13           System.out.println("Got notification: " + notifications[i].getName());
14             }    
15      }        
16                 
17      // wait a while before checking again for new        
18      // notifications        
19      Thread.sleep(500);
       ...        
复制代码
打个比方来说,剧场看门人和剧场经理是观察者模式,剧场经理有了新剧目,他会通知看门人。

而你作为观众,没必要老去打扰繁忙的剧场经理,只要隔一段时间打电话给剧场看门人。

电话费比较贵(越洋国际电话10美刀/分钟)所以,你给看门人打电话时,只是简单问候。
如果剧场看门人已经被剧场经理通知有新剧目,他会告诉你说有新戏某某!你就知道有新剧目了。

你作为观众就是 Java Thread      
电话设备和电话线就是 JDBC Driver
你给看门人打电话就是 "select 1"  
看门人就是 libpq里的 PGNotification
剧场经理就是 PostgreSQL后台服务器进程

你的大老板则是最终用户。大老板看来,下面的经理(Java Application)忙着向他汇报工作;

当国外剧场有新剧目的时候,花很少钱(你和看门人联系,废话从不多讲),也没有耽误(电话都是你这个Java Thread 来用的) 工作,就知道了消息;于是大老板坐飞机去悉尼看戏去也。








http://www.cnblogs.com/gaojian/archive/2012/07/12/2588368.htmlXXXXXXXX,如需转载请自行联系原作者
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 数据库 PostgreSQL
|
2天前
|
弹性计算 关系型数据库 MySQL
在线安装MySQL5.7和MySQL8.0
【4月更文挑战第30天】
11 0