Nacos-3.0.0适配PostgreSQL数据库

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

Nacos-3.0.0适配PostgreSQL数据库

引言

前段时间写了一篇文章叫“Nacos-2.4.0最新版本,postgresql插件适配器修改分享”,旨在解决nacos适配PostgreSQL数据库的问题,因为阿里巴巴nacos开发团队太忙了,一直忙着迭代开发nacos,给大家持续贡献更多更优秀的功能。

但是每次发布nacos版本时,却忘了及时更新nacos对应的其他数据源支持,比如大家常用的PostgreSQL数据库,就有好多伙伴在网上搜索nacos的PostgreSQL数据库支持插件!却很难找到一个现成能用的,最终都只能接受一个办法,那就是下载nacos的多数据源项目源码自己在本地修改bug后打包!有这类需求的朋友,心里应该都清楚,几经折腾很想放弃,但是心有不甘,好不容易走到下载代码后,修改打包这一步,换来的却是无数次失败,真的够大家使劲折腾一番!


好了,废话不多说,相信大家都知道了,前几天nacos官方发出了新版本3.0.0正式版,这个版本可谓是花了不少心血啊,前后差不多耗时三五个月,新版本确实有很多大家备受期待的功能,比如:

  1. 身份验证机制‌:支持多种身份验证方式,如OAuth 2.0JWT,确保只有经过授权的用户才能访问敏感数据。
  2. 细粒度权限控制‌:管理员可以为不同的用户和角色设置详细的权限,实现更精细的访问控制。
  3. 加密算法‌:引入更强大的加密算法,如AES-256,确保数据在传输和存储过程中的安全性‌。
  4. 配置灰度管理‌:支持记录配置灰度历史,方便用户在配置灰度变更后能够查询到之前的变更历史记录和内容,提升了配置变更期间的稳定性和可用性‌。
  5. 寻址逻辑统一‌:优化了客户端和服务端的寻址模块,减少了代码冗余,提高了系统的稳定性和可维护性‌。

看到这些新特性,相信大家心里应该都迫不及待想体验了,不过对于使用MySQL的朋友们,确实很方便,不需要那么折腾,因为nacos自身默认使用的就是Mysql,因此本文可能不太需要关注。但是对于想用其他数据库的朋友们,比如想基于PostgreSQL数据库存储nacos数据的朋友们,今天这篇文章就是大家期待的!

本文重点介绍基于Nacos-3.0.0最新版本如何用PostgreSQL数据库来存储,也就是如何打造或直接获取能适配Nacos-3.0.0PostgreSQL数据库插件。


Nacos-3.0.0版本最直接最快集成PostgreSQL数据源的方法就是引入依赖,这也是本文重点,也就是核心部分,我把它放这里:

<dependency><groupId>com.sinhy</groupId><artifactId>nacos-postgresql-datasource-plugin-ext</artifactId><version>3.0.0</version>
</dependency>

我已将pg数据源插件打成了jar包,传到maven中央仓库,大家只需下载该jar,然后放入nacoshome目录下的plugins插件目录,再配置pg数据源信息,即可使用!

一、PostgreSQL数据库源码地址

为了方便后续及时更新Nacos每个版本对应的PostgreSQL数据库插件,我们特意基于官方提供的Nacos插件工程进行了二开,然后打算后续自己维护这部分功能,因此给大家分享:
Nacos-3.0.0PostgreSQL数据库插件源码地址
https://github.com/lilinhai/nacos-datasource-plugin-ext

注意:目前该工程中,只有PostgreSQL插件可以正常使用,其余数据库暂未做相关深入适配和测试!

1.1 nacos-3.0.0新增表config_info_gray

config_info_gray这个表是nacos-3.0.0新增的,用于灰度管理配置,支持记录配置灰度历史,方便用户在配置灰度变更后能够查询到之前的变更历史记录和内容,提升了配置变更期间的稳定性和可用性‌。以下是该表的postgresql适配。

DROP TABLE IF EXISTS "config_info_gray";
CREATE TABLE "config_info_gray" ("id" bigserial NOT NULL,"data_id" varchar(255) NOT NULL,"group_id" varchar(128) NOT NULL,"content" text NOT NULL,"md5" varchar(32),"src_user" text,"src_ip" varchar(100) NOT NULL,"gmt_create" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,"gmt_modified" timestamp(6) NOT NULL,"app_name" varchar(128) DEFAULT NULL::character varying,"tenant_id" varchar(128) DEFAULT ''::character varying,"gray_name" varchar(128) NOT NULL,"gray_rule" text NOT NULL,"encrypted_data_key" varchar(256) NOT NULL
);
COMMENT ON COLUMN "config_info_gray"."id" IS '自增ID';
COMMENT ON COLUMN "config_info_gray"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_gray"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_gray"."content" IS 'content';
COMMENT ON COLUMN "config_info_gray"."md5" IS 'md5';
COMMENT ON COLUMN "config_info_gray"."src_user" IS 'src_user';
COMMENT ON COLUMN "config_info_gray"."src_ip" IS 'src_ip';
COMMENT ON COLUMN "config_info_gray"."gmt_create" IS 'gmt_create';
COMMENT ON COLUMN "config_info_gray"."gmt_modified" IS 'gmt_modified';
COMMENT ON COLUMN "config_info_gray"."app_name" IS 'app_name';
COMMENT ON COLUMN "config_info_gray"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "config_info_gray"."gray_name" IS 'gray_name';
COMMENT ON COLUMN "config_info_gray"."gray_rule" IS 'gray_rule';
COMMENT ON COLUMN "config_info_gray"."encrypted_data_key" IS 'encrypted_data_key';-- ----------------------------
-- Primary Key structure for table config_info_gray
-- ----------------------------
ALTER TABLE "config_info_gray" ADD CONSTRAINT "config_info_gray_pkey" PRIMARY KEY ("id");

1.2 nacos-3.0.0废弃表config_info_aggr

config_info_aggr表在Nacos 3.0版本中不存在了‌。在Nacos的早期版本中,config_info_aggr表用于存储聚合后的配置信息,主要用于集群环境中配置信息的聚合和同步。然而,在Nacos 3.0版本中,这一功能已经被重新设计和优化,不再依赖于单独的config_info_aggr表来实现。

1.3 Nacos 3.0中的变化

Nacos 3.0版本对配置管理进行了重大改进,主要包括以下几个方面:

  1. 去中心化存储‌:在Nacos 3.0中,配置信息不再集中存储在单一的数据库表中,而是分散存储在多个表中,每个服务或命名空间都有自己的数据表。这种设计减少了单一故障点,提高了系统的可靠性和扩展性。
  2. 优化查询性能‌:通过改进查询逻辑和索引策略,Nacos 3.0显著提升了查询性能,尤其是在大规模配置管理场景下。
  3. 更好的兼容性和扩展性‌:新版本支持更多的数据库类型和更灵活的配置管理策略,使得Nacos能够更好地适应不同的使用场景和需求。

Nacos 3.0版本的功能改进

Nacos 3.0不仅去除了config_info_aggr表,还引入了其他重要的功能和改进:

  1. 更强的扩展性‌:支持更多的服务发现和配置管理场景,包括微服务架构、云原生应用等。
  2. 更高的可靠性‌:通过分布式架构设计,提高了系统的稳定性和可用性。
  3. 更好的性能‌:优化了查询和处理速度,尤其是在大数据量下表现更佳。
  4. 更灵活的配置管理‌:支持更细粒度的配置管理和权限控制,满足不同团队和项目的需求。

二、灰度配置适配

增加了一个抽象类,用于适配其他数据库多灰度配置表的支持:

public abstract class BaseConfigInfoGrayMapper extends AbstractDataSourceMapper implements ConfigInfoGrayMapper
{/*** <pre>构造方法</pre>* @since 2025-04-27 10:03* @param databaseDialect*/protected BaseConfigInfoGrayMapper(DatabaseDialect databaseDialect){super(databaseDialect);}@Overridepublic String getTableName(){return TableConstant.CONFIG_INFO_GRAY;}@Overridepublic MapperResult findAllConfigInfoGrayForDumpAllFetchRows(MapperContext context){String sql = " SELECT id,data_id,group_id,tenant_id,gray_name,gray_rule,app_name,content,md5,gmt_modified " + " FROM  config_info_gray  ORDER BY id ";sql = databaseDialect.getLimitPageSqlWithOffset(sql, context.getStartRow(), context.getPageSize());return new MapperResult(sql, Collections.emptyList());}
}

三、源码打包构建

源码下载本地后,也可以手动打包构建,输出pg插件,如下图:
在这里插入图片描述
执行maven构建命令:

clean package

将输出jar到target目录下:
在这里插入图片描述将jar拷贝到nacos的plugins目录下即可
在这里插入图片描述

四、nacos3.0 基于pg启动

启动需要输入安全密钥:
在这里插入图片描述输入后回车、即可访问8080(管理端口)端口:
在这里插入图片描述

五、插件概述

5.1、简介

从Nacos2.2版本开始,Nacos提供了数据源扩展插件,以便让需要进行其他数据库适配的用户自己编写插件来保存数据。当前项目插件目前已简单适配Postgresql。

当前插件项目地址:
https://github.com/lilinhai/nacos-datasource-plugin-ext

当前项目是基于Nacos3.0.0版本的扩展插件口进行开发,同时也是基于以下项目的一个分支进行的而开:
https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext

很感谢阿里nacos团队的贡献,你们一如既往的迭代nacos版本,给你们说声辛苦了,但是却忘记了nacos的其他数据源适配,比如postgresql

5.2、插件工程结构说明

nacos-datasource-plugin-ext-base工程为数据库插件操作的适配抽象定义。
nacos-postgresql-datasource-plugin-ext工程可打包适配Postgresql的数据库插件

六、下载和使用

6.1、插件引入

方式一:将nacospostgresql插件下载下来,将依赖手动拷贝到nacoshome目录下的plugins目录下(nacos-3.0.0/plugins)即可。

  • 以下nacospostgresql插件版本仅支持nacos3.0.0,采用jdk17编译级:
<dependency><groupId>com.sinhy</groupId><artifactId>nacos-postgresql-datasource-plugin-ext</artifactId><version>3.0.0</version>
</dependency>

方式二:下载当前插件项目源码,打包为jar包,将该文件的路径配置到startup.sh文件中,使用Nacosloader.path机制指定该插件的路径,可修改startup.sh中的loader.path参数的位置进行指定。

6.2、修改数据库配置文件

application.properties文件中声明postgresql的配置信息:

spring.sql.init.platform=postgresql#spring.datasource.platform=postgresql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?currentSchema=public&useUnicode=true&tcpKeepAlive=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user.0=nacos
db.password.0=nacos
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
db.pool.config.driverClassName=org.postgresql.Driver# 如果是 oracle 则需要改为 SELECT * FROM dual 
# db.pool.config.connectionTestQuery=SELECT 1

6.3、导入Postgresql的数据库脚本文件

导入nacos-postgresql的脚本文件,脚本文件在nacos-postgresql-datasource-plugin-ext/src/main/resources/schema文件夹下面.

上面操作完成后,启动Nacos即可。

七、其他数据库插件开发

可参考nacos-postgresql-datasource-plugin-ext工程,新创建Maven项目,实现AbstractDatabaseDialect类,重写相关的分页操作逻辑与方法,并创建相应的mapper实现。

八、参考资料

https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习第三篇 模型评估(交叉验证)

Sklearn:可以做数据预处理、分类、回归、聚类&#xff0c;不能做神经网络。原始的工具包文档&#xff1a;scikit-learn: machine learning in Python — scikit-learn 1.6.1 documentation数据集:使用的是MNIST手写数字识别技术&#xff0c;大小为70000&#xff0c;数据类型为7…

如何在 IntelliJ IDEA 中编写 Speak 程序

在当今数字化时代&#xff0c;语音交互技术越来越受到开发者的关注。如果你想在 IntelliJ IDEA&#xff08;一个强大的集成开发环境&#xff09;中编写一个语音交互&#xff08;Speak&#xff09;程序&#xff0c;那么本文将为你提供详细的步骤和指南。 一、环境准备 在开始编…

AI大模型学习十四、白嫖腾讯Cloud Studio AI环境 通过Ollama+Dify+DeepSeek构建生成式 AI 应用-接入DeepSeek大模型

一、说明 需要阅读 AI大模型学习十三、白嫖腾讯Cloud Studio AI环境 通过OllamaDifyDeepSeek构建生成式 AI 应用-安装-CSDN博客https://blog.csdn.net/jiangkp/article/details/147580344?spm1011.2415.3001.5331 我们今天干点啥呢&#xff0c;跟着官网走 模型类型 在 Dify…

《Astro 3.0岛屿架构让内容网站“脱胎换骨”》

内容优先的网站越来越成为主流。无论是新闻资讯、知识博客&#xff0c;还是电商产品展示&#xff0c;用户都希望能快速获取所需内容&#xff0c;这对网站的性能和体验提出了极高要求。而Astro 3.0的岛屿架构&#xff0c;就像是为内容优先网站量身定制的一把神奇钥匙&#xff0c…

在 UniApp 中实现 App 与 H5 页面的跳转及通信

在移动应用开发中&#xff0c;内嵌 H5 页面或与外部网页交互是常见需求。UniApp 作为跨平台框架&#xff0c;提供了灵活的方式实现 App 与 H5 的跳转和双向通信。本文将详细讲解实现方法&#xff0c;并提供可直接复用的代码示例。 文章目录 一、 App 内嵌 H5 页面&#xff08;使…

springboot 实现敏感信息脱敏

记录于2025年4月28号晚上--梧州少帅 1. 定义枚举类&#xff1a; public enum DesensitizeType {NAME, EMAIL } 2. 创建自定义注解&#xff1a; 用于标记需要脱敏的字段及其类型。 Retention(RetentionPolicy.RUNTIME) JacksonAnnotationsInside JsonSerialize(using Desen…

SNMP协议之详解(Detailed Explanation of SNMP Protocol)

SNMP协议之详解 一、前言 SNMP&#xff0c;被形象地喻为网络世界大的工具箱&#xff0c;使他们能的“智慧守护者”&#xff0c;它为网络管理员装备了一套功能强够实现对网络设备状态的实时监控、性能数据的全面收集、远程配置的灵活管理以及故障事件的即时响应。借助SNMP&…

SpeedyAutoLoot

SpeedyAutoLoot自动拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…

xe-upload上传文件插件

1.xe-upload地址&#xff1a;文件选择、文件上传组件&#xff08;图片&#xff0c;视频&#xff0c;文件等&#xff09; - DCloud 插件市场 2.由于开发app要用到上传文件组件&#xff0c;uni.chooseFile在app上不兼容&#xff0c;所以找到了xe-upload&#xff0c;兼容性很强&a…

Golang|外观模式和具体逻辑

最终返回的是Document的切片&#xff0c;然后取得Bytes自己再去做反序列化拿到文档的各种详细信息。 外观模式是一种结构型设计模式&#xff0c;它的目的是为复杂的子系统提供一个统一的高层接口&#xff0c;让外部调用者&#xff08;客户端&#xff09;可以更简单地使用子系统…

2025年3月AGI技术月评|技术突破重构数字世界底层逻辑

〔更多精彩AI内容&#xff0c;尽在 「魔方AI空间」 &#xff0c;引领AIGC科技时代〕 本文作者&#xff1a;猫先生 ——当「无限照片」遇上「可控试穿」&#xff0c;我们正在见证怎样的智能革命&#xff1f; 被低估的进化&#xff1a;开源力量改写游戏规则 当巨头们在AGI赛道…

可解释人工智能(XAI):让机器决策透明化

在人工智能&#xff08;AI&#xff09;技术飞速发展的今天&#xff0c;AI 系统已经广泛应用于金融、医疗、交通等多个关键领域。然而&#xff0c;随着 AI 系统的复杂性不断增加&#xff0c;尤其是深度学习模型的广泛应用&#xff0c;AI 的“黑箱”问题逐渐凸显。AI 系统的决策过…

【Go语言】ORM(对象关系映射)库

github.com/jinzhu/gorm 是 Go 语言中一个非常流行的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;用于简化与关系型数据库的交互。以下是关于它的关键信息&#xff1a; 核心特点 全功能 ORM 支持主流数据库&#xff1a;MySQL、PostgreSQL、SQLite、SQL Server 等。…

大数据企业实验室管理的痛点 质检LIMS系统在大数据企业的应用

在数字化转型浪潮中&#xff0c;大数据企业正面临海量数据管理与质量控制的双重挑战。实验室作为数据生产的核心环节&#xff0c;其检测流程的规范化、数据处理的智能化直接关系到企业数据资产的可靠性。质检LIMS&#xff08;实验室信息管理系统&#xff09;通过整合实验室资源…

在Arduino U8g2库中显示中文的方法

U8g2库支持中文显示&#xff0c;但需要手动添加中文字体或使用内置的有限中文字符。以下是具体实现方法&#xff1a; 方法一 使用U8g2内置的中文字体&#xff08;不推荐&#xff09; 缺点&#xff1a;内置字体支持的汉字较少&#xff0c;可能无法显示所有需要的字符。不推荐。…

自动驾驶分级

一、美国 SAE J3016 Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles(2021) 1、驾驶自动化级别&#xff08;Levels of Driving Automation&#xff09; 共分为 6 个级别&#xff0c;从 无自动化&#xff08;0&#…

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能

工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能 北京海特伟业科技有限公司任洪卓发布于2025年4月28日 在数字化转型浪潮下&#xff0c;IP应急广播呼叫对讲广播系统凭借其网络化、智能化、融合化、多元化等优势&#xff0c;已…

DNS主从同步及解析

DNS 域名解析原理 域名系统的层次结构 &#xff1a;DNS 采用分层树状结构&#xff0c;顶级域名&#xff08;如.com、.org、.net 等&#xff09;位于顶层&#xff0c;下面是二级域名、三级域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是顶级域名…

再看 BBR 到 BBRv3 的公平性改进

从看一篇论文开始&#xff1a;Performance Evaluation of TCP BBRv3 in Networks with Multiple Round Trip Times&#xff0c;结论比较悲观&#xff1a; 虽然 BBRv2/3 试图解决 BBRv1 的公平性问题&#xff0c;但结果依旧不够理想&#xff0c;BBR 的迭代依旧任重而道远。 BB…

locust压力测试

安装 pip install locust验证是否安装成功 locust -V使用 网上的教程基本上是前几年的&#xff0c;locust已经更新了好几个版本&#xff0c;有点过时了&#xff0c;在此做一个总结 启动 默认是使用浏览器进行设置的 # 使用浏览器 locust -f .\main.py其他参数 Usage: locust […