PG LISTEN/NOTIFY异步消息
学习使用PostgreSQL的LISTEN/NOTIFY实现异步消息通信 · 难度:入门 · +15XP
LISTEN/NOTIFY机制
LISTEN/NOTIFY是PostgreSQL内置的异步消息系统,允许一个会话发送通知,其他监听该通道的会话接收。
基本用法
-- 会话A:监听通道
LISTEN my_channel;
-- 会话B:发送通知
NOTIFY my_channel, 'Hello from session B';
-- 会话A会收到异步通知
结合触发器使用
-- 创建触发器函数
CREATE OR REPLACE FUNCTION notify_new_order()
RETURNS trigger AS $$
BEGIN
PERFORM pg_notify('new_order',
json_build_object(
'order_id', NEW.id,
'customer', NEW.customer_name,
'total', NEW.total
)::text
);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- 创建触发器
CREATE TRIGGER order_notify_trigger
AFTER INSERT ON orders
FOR EACH ROW
EXECUTE FUNCTION notify_new_order();
在应用中使用
-- 监听通道
LISTEN new_order;
-- 插入订单触发通知
INSERT INTO orders (customer_name, total) VALUES ('张三', 199.99);
-- 获取通知(在psql中)
-- Asynchronous notification "new_order" received from server process with payload "{"order_id":1,"customer":"张三","total":199.99}"
通知特性
| 特性 | 说明 |
|---|---|
| 异步 | 发送者不等待接收者 |
| 无持久化 | 通知不存储在数据库中 |
| 最大负载 | 8000字节 |
练习提示
创建一个库存更新通知系统,当库存低于阈值时自动发送通知。