postgresql 创建listen notify .net core6.0监听连接

背景:数据库某张表定时有第三方更新到实时表里,收到数据更新以后,WEBSOCKET发送前端

-- 创建一个发送通知的函数

CREATE OR REPLACE FUNCTION notify_event(event_name text) RETURNS void AS $$

BEGIN

PERFORM pg_notify(event_name, '');

END;

LANGUAGE plpgsql; -- 创建一个触发器,在数据变化时调用通知函数 CREATE OR REPLACE FUNCTION notify_trigger() RETURNS trigger AS

BEGIN

PERFORM notify_event('data_changed');

RETURN NEW;

END;

LANGUAGE plpgsql; -- 在需要监听的表上创建触发器 CREATE TRIGGER data_change_trigger AFTER INSERT OR UPDATE OR DELETE ON river_area FOR EACH ROW EXECUTE FUNCTION notify_trigger(); .net core创建一个后台运行服务 using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Npgsql; namespace Pipe.BLL { public class TableUpdateListenerService : BackgroundService { private readonly IServiceProvider _services; public TableUpdateListenerService(IServiceProvider services) { _services = services; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using var scope = _services.CreateScope(); var serviceProvider = scope.ServiceProvider; var connectionString = serviceProvider.GetRequiredService\().GetConnectionString("LocalNpgsqlConnection"); using var conn = new NpgsqlConnection(connectionString); await conn.OpenAsync(stoppingToken); using var cmd = new NpgsqlCommand("listen data_changed", conn); cmd.ExecuteNonQuery(); conn.Notification += (sender, e) =\> { Console.WriteLine($"Received table update notification: {e.Payload}"); // 在这里执行相应的操作,处理接收到的通知 }; while (!stoppingToken.IsCancellationRequested) { using var transaction = conn.BeginTransaction(); await transaction.CommitAsync(); await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken); // 可以选择适当的延迟时间 } } } } startup.cs注册下服务 services.AddHostedService\(); psql 发送测试。 UPDATE "public"."river_area" SET "objectid" = 5 WHERE "gid" = 3; NOTIFY data_changed, 'Your notification payload here'; 测试通过

相关推荐
三不原则19 分钟前
故障案例:数据库慢查询导致交易延迟,AIOps 如何自动定位?
运维·数据库
Elieal24 分钟前
MybatisPlus难懂点
数据库·mybatis
一只专注api接口开发的技术猿31 分钟前
微服务架构下集成淘宝商品 API 的实践与思考
java·大数据·开发语言·数据库·微服务·架构
AC赳赳老秦37 分钟前
Dify工作流+DeepSeek:运维自动化闭环(数据采集→报告生成)
android·大数据·运维·数据库·人工智能·golang·deepseek
明洞日记39 分钟前
【软考每日一练009】计算机系统性能评价:基准程序分类与 TPC 实战案例详解
大数据·数据库
Hoxy.R1 小时前
海量数据库安装部署初体验
服务器·网络·数据库
癫狂的兔子1 小时前
【Python】【爬虫】爬取虎扑网NBA排行数据
数据库·爬虫·python
迷路剑客1 小时前
ES-7.10-高亮HighLight知识点总结
java·数据库·mybatis
程序边界1 小时前
解锁时序数据新玩法:金仓数据库实战体验分享
数据库
1314lay_10072 小时前
.NET 7.0在.NET Core Web API中实现限流
.net·.netcore