Nacos2.2版本发布了,我为其贡献了几行代码并适配了PostgreSQL插件

2023-11-13

目录

一、背景

二、个人贡献

三、Nacos使用适配的PostgreSQL插件

3.1、插件源码工程项目结构:

3.2、打包加载插件

3.3、修改配置文件为PostgreSQL连接字符串

3.4、导入数据库脚本文件

四、总结


一、背景

Nacos 是 Dynamic Naming and Configuration-Service 的首字母简称,定位于一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos的开源社区目前应该是很活跃了,2022年12月14日,官方发布了Nacos2.2的正式版,也是目前最新且最稳定的版本了,估计会代替2.1用一段时间了,在该版本中添加了数个新的插件支持,例如 数据源插件、自定义环境变量插件 等等,比如用数据源插件扩展接口,开发者可实现配置中心数据库存储的适配;比如用自定义环境变量插件接口,允许通过插件的方式对nacos服务端启动时的配置进行特殊处理,比如可以配置数据库密码为密文,在插件中进行解密,以此来支持配置加密数据库密码以及后续可能有的其他关于配置特殊处理的需求。

2.2版本个人有幸参与其开源贡献,并提交了几个简单的Pull Request,去减少下之前代码中一些固定写死的内容。数据源插件改造适配的工作核心开发者主要为社区的某位黄同学和李老师。

二、个人贡献

目前个人为Nacos提交的PR记录为9个,虽然不是核心改动,但是至少是踏进了开源社区的大门,提交记录截图如下,标红框的为本次中一些写死内容的判断更改:

 之前的版本中,Nacos仅支持MySQL、Derby作为底层配置中的数据存储,2.2版本开始,提供了数据库插件扩展接口,允许开发者自定义开发适配数据库插件。目前我已经基于Nacos2.2的最新代码分支,进行了简单的PostgreSQL数据库的适配,在之前8月份的时候,个人为2.1.0版本适配了下PostgreSQL、Oracle、达梦等数据库,虽然目前可能存在一些未测试到的问题,但是希望大家一起参与测试和贡献,和大家一些修复和优化,提升自己对Nacos的认知。

访问我的Github主页获得Nacos2.2的PostgreSQL数据库适配的项目代码,可自行打包编译。

Nacos2.2 PostgreSQL适配插件地址:

https://github.com/wuchubuzai2018/nacos-datasource-extend-plugins

Nacos2.1 Nacos多数据源适配项目(支持Oracle、PostgreSQL、达梦),目前持续发现测试问题,并进行修复中,感兴趣的一起来优化和修复哦:

https://github.com/wuchubuzai2018/nacos-multidatasource

三、Nacos使用适配的PostgreSQL插件

Nacos2.2提供了插件扩展点让开发者适配,个人基于扩展口,进行了抽象,封装出公共的数据库方言类,对于一些类似的数据库,可以继承相关方言即可。这里介绍下个人开发的PostgreSQL数据库插件的说明:

3.1、插件源码工程项目结构:

下载源码工程,结构如下:

nacos-datasource-plugin-ext工程主目录

----nacos-datasource-plugin-ext-base工程设计为数据库插件操作的适配抽象。

----nacos-all-datasource-plugin-ext工程计划可打包所有适配的数据库插件

----nacos-postgresql-datasource-plugin-ext工程可打包适配Postgresql的数据库插件

3.2、打包加载插件

下载当前插件项目源码,打包为jar包,将该jar文件放到某个目录中,然后在startup.sh文件中,使用Nacos的loader.path机制指定该插件的路径,可修改startup.sh中的loader.path参数的位置进行指定,这样就会加载我们的jar包文件。

3.3、修改配置文件为PostgreSQL连接字符串

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

spring.datasource.platform=postgresql
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?tcpKeepAlive=true&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user=nacos
db.password=nacos
db.pool.config.driverClassName=org.postgresql.Driver

注意:这里需要配置属性db.pool.config.driverClassName,默认如果不传递的则是MySQL的驱动路径,这里的简单判断逻辑也是我提交的PR。

3.4、导入数据库脚本文件

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

上面操作完成后,启动Nacos即可,如果在启动的过程中,出现no DataSource Set之类的错误,基本就是数据库链接参数的问题,自己可以进行相关的排查操作。

四、总结

Nacos的源码是很值得我们程序员去学习的,因为它比较像是一个业务功能类的中间件系统,学习大厂程序员的开发规范和设计思想,且内部用到了大量的并发编程的知识点,也是很有帮助的。

Nacos 是阿里巴巴微服务领域开源项目的活跃度排行第一,也得益于开源协作模式,并且在 Nacos 中有大量国内外知名公司的核心贡献者,其中也包含就职在腾讯、华为、小米等等知名企业的同学,也正是社区整体的贡献者和用户在帮助 Nacos 成长,让 Nacos 逐步完善生态,支持几乎所有主流语言,整合更多开源生态,也正是用户和社区贡献者让 Nacos 为企业数字化转型首选产品。

感兴趣的可以关注我,后续看看再分享开发和使用该数据源插件的一些细节性问题。

本文首发于我的微信公众平台,感兴趣的可以关注我《无处不在的技术》,一起交流。

根据最近刚发布的《2022 中国开源发展蓝皮书》报告中显示,Github 中国项目活跃度 TOP 20,Nacos 排名全国第六,作为基础类型云原生中间件,能有如此活跃度是非常不容易的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nacos2.2版本发布了,我为其贡献了几行代码并适配了PostgreSQL插件 的相关文章

  • 在 PostgreSQL 的表中添加缺失的日期

    我有一个表 其中包含 2002 年每一天的数据 但其中缺少一些日期 即 2002 年有 354 条记录 而不是 365 条 对于我的计算 我需要在表中包含空值的缺失数据 ID rainfall date 100 110 2 2002 05
  • TypeORM 插入带有外键的行

    我之间有 OneToMany 关系聊天室1 M gt 留言我遇到的问题是 每当我尝试插入一条消息 或大量消息 时 ChatRoom 的外键为空 此外 我正在上传我的设置 Entity messages export class Messag
  • 如何更改 PostgreSQL 表中列的数据类型?

    在 PostgreSQL 交互式终端中输入以下命令会导致错误 ALTER TABLE tbl name ALTER COLUMN col name varchar 11 更改列的数据类型的正确命令是什么 请参阅此处的文档 http www
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几
  • 强制 DataMapper 断开与 postgresql 的连接

    我有一个测试 正在 postgresql 中创建和销毁多个数据库 为了能够删除数据库 我需要告诉 DataMapper 断开连接 我似乎找不到任何有关如何执行此操作的文档 DataMapper Adapters PostgresAdapte
  • 如何使用 Dapper 从 .NET 7 执行 Postgresql 函数,而不列出所有参数的数据类型

    我正在尝试将我的 NET 5 Web API 代码传输到 NET 7 我有一个名为的单例服务DataManager它实现了接口IDataManager 其中一项功能是Execute还有其他 C 函数 称为 Get GerMany 以及 In
  • CREATE VIEW 指定的列名多于列

    如果我在 PostgreSQL 9 4 8 中运行以下语句 我会收到以下错误消息 CREATE VIEW 指定的列名多于列 但为什么 没有f1返回一个包含 5 列的表格 不应该v1也有 5 列吗 另外 如果我从第一个中删除演员阵容SELEC
  • Ansible 创建可以访问所有表的 postgresql 用户?

    这应该很简单 我想要创建一个 Ansible 语句来创建一个 Postgres 用户 该用户具有特定数据库的连接权限以及对该特定数据库中所有表的选择 插入 更新 删除权限 我尝试了以下方法 name Create postgres user
  • 在 Mac 中运行 Postgresql:数据库“postgres”不存在 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我按照这些说明让 postgresql 在 mac 上运行 请注意 我使用 Homebrew 进行安装 并且当前可通过brew安装的版本是 9 2 1
  • PostgreSQL 中字符串列类型的索引数组

    是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 是否有可能在 postgres 中捕获外键违规

    我正在尝试将数据插入具有外键约束的表中 如果我插入的行中存在约束违规 我想丢弃该数据 问题是每次我违反约束时 postgres 都会返回一个错误 我是否可以在插入语句中添加一些语句 例如 ON FOREIGN KEY CONSTRAINT
  • 在 PostgreSQL 中使用月份名称排序

    我有一个表 其中有一个字段 Month Name 它包含月份的名称 我想按月份名称排序 不是按字母顺序 而是按实际顺序 例如一月 二月等 如何使用 PostgreSQL 实现此操作 有什么方法可以将月份名称转换为其数值吗 id billed
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • wal_keep_segments 为什么是最小值而不是最大值?

    根据docs http www postgresql org docs current static runtime config replication html wal keep segments integer 指定过去日志的最小数量
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • Postgres 中的输出 Inserted.id 等效项

    我是 PostgreSQL 新手 正在尝试将 mssql 脚本转换为 Postgres 对于合并语句 我们可以使用冲突更新插入或不执行任何操作 但我使用下面的语句 不确定这是否是正确的方法 MSSQL代码 Declare tab2 New
  • 即使删除了某些行,使用种子值进行随机排序也会再次返回相同的集合吗?

    我正在编写一个分页 API 通过设置随机种子值来给出随机结果 除非用户想要洗牌结果 否则结果将是相同的 但如果用户想要洗牌 我将重新创建种子值 以便它将返回一组不同的记录 我的问题是 如果我从数据库中删除一条记录 即使种子相同 由于元素长度

随机推荐

  • 微服务架构的主要优势是什么

    微服务架构提供了几个关键优势 使其成为设计和构建应用程序的流行选择 以下是微服务架构的一些显着优势 可扩展性 微服务架构允许单个服务根据其特定需求独立扩展 这种可扩展性可实现高效的资源利用 并能够通过仅扩展必要的服务来处理高流量负载 它可以
  • Kbuild系统源码分析(五)—模块的编译流程

    版权声明 本文为CSDN博主 ashimida 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lidan113lidan article details
  • 手机黑屏摄像app_手机黑屏摄像软件下载-手机黑屏摄像持续拍摄app1.3安卓版下载_骑士下载...

    手机黑屏摄像持续拍摄app这是一款支持黑屏状态下拍摄的软件 如果你有这方面的需要 可以来试试的 不会让人发现你在拍摄 软件中有黑屏模式 你打开就可以了 使用起来简单 操作也方便 需要的朋友赶紧下载试试吧 软件介绍 能够根据手机上黑屏状态下还
  • 实践指南-前端性能提升 270%

    一 背景 当我们疲于开发一个接一个的需求时 很容易忘记去关注网站的性能 到了某一个节点 猛地发现 随着越来越多代码的堆积 网站变得越来越慢 本文就是从这样的一个背景出发 着手优化网站的前端性能 并总结出一套开发习惯 让我们在日常开发时 也保
  • 无网环境下安装Mysql8.0

    在redhat7 6操作系统上安装mysql8 0服务 服务器只有内网 没有外网 记录一下安装过程 一 软件准备 1 1 下载mysql安装包 下载地址 https dev mysql com downloads mysql 1 2 准备依
  • Vue3 ERROR Error: Cannot find module ‘vue-loader-v16/package.json‘

    Vue3 ERROR Error Cannot find module vue loader v16 package json Vue3 npm run serve错误 1 主要错误信息 2 Vue3项目 运行环境 3 Vue3项目运行操作
  • 金山办公慢下来了?

    大数据产业创新服务媒体 聚焦数据 改变商业 只有长期主义者 才能成为时间的朋友 在笔者看来 越来越向SaaS模式倾斜的金山办公便是 长期主义 的代表之一 近日 金山办公 股票代码 688111 发布2023年半年度报告 报告显示 2023上
  • 如何用python提取音频

    可以使用 Python 的多种库来提取音频 其中一种方法是使用 ffmpeg 库 首先 需要安装 ffmpeg 库 可以使用以下命令进行安装 pipinstall ffmpeg 然后 可以使用以下代码来提取音频 import ffmpeg
  • 一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子

    备注 这是我辅导的一个项目开发组的一个例子 用文章的方式分享出来 给更多的朋友参考 其实我们这几年的项目中 都不怎么使用服务器控件的形式了 而是更多的采用MVC这种开发模式 但是 如果项目的历史背景是用服务器控件的 也不妨继续沿用 以免变动
  • Rust引入外部包,VsCode引入失败,Blocking waiting for file lock on package cache lock

    引入外部包出错的解决方法 VsCode导入包后一直转圈 首先要停掉Rust server Ctrl Shift P 快捷键 输入Stop那个 停掉服务 改用命令行 像这样 可以看到它说 Blocking waiting for file l
  • ChatGLM环境配置

    目的 ChatGPT令人震撼的冲击下 笔者转向NLM的Transformer模型 ChatGLM作为清华开源的大语言模型 笔者尝试了其环境配置 为相关理论学习奠定基础 本文用于备忘与学习 无商业用途 参考 ChatGLM的源码下载链接 Gi
  • 总结24个Python接单赚钱的平台,兼职月入5000+

    如果说当下什么编程语言最靠谱或者比较适合搞副业 答案肯定100 是 Python python是所有语法中最简单易上手的语言 不需要特别的的英语词汇量 逻辑思维也不需要很差就能上手 而且学会了之后就能编写代码爬取各种数据 制作各种图表 提升
  • Android学习路线

    Android学习路线 绝对干货
  • CVE-2021-44228-log4j2复现详细版本-简单教程。

    0x01 前言 昨晚爆出的log4j rce 是通过lookup触发的漏洞 但jdk1 8 191以上默认不支持ldap协议 对于高版本jdk 则需要一定的依赖 不过为了给大家最简单的说明 我这里还是用jdk1 8 144的版本来运行 0x
  • Pytorch-torch.nn.identity()方法详解

    Pytorch torch nn identity 方法详解 identity模块不改变输入 直接return input 一种编码技巧吧 比如我们要加深网络 有些层是不改变输入数据的维度的 在增减网络的过程中我们就可以用identity占
  • Web 前端常用正则校验规则

    Web 前端常用正则校验规则 作为 Web 前端开发 常用的正则校验规则有很多 下面是一些常见的示例 1 校验手机号码 手机号码的正则表达式可以根据不同国家和地区的手机号码格式进行调整 以下是中国大陆的手机号码正则表达式 const reg
  • 关于C语言fgets函数要注意的地方

    关于C语言fgets函数要注意的地方 fgets函数一般用来读入文件内容 每次读一行 然后存入缓存区 有人问那怎么读下一行 直至读完整个文本文件的内容 其实很简单 只要循环用fgets就行 如果你这次把第一行读完了 那么下一次文件指针就会从
  • 关于springboot中编写继承JpaRepository这个接口类时出现报红,不能继承这个接口的问题之解决方法

    这是第二次遇到这个问题只能怪自己之前没有习惯去记录遇到的问题 这次还是关于Jpa的 真的是在找博客的时候看到好多说在入口类里添加 EnableJpaRepositories basePackages xxx xxx xxx 这个注解的 我就
  • el-table-column中运用三元运算符

    在el table column中是不能直接运用三元运算符的 需要转化一下
  • Nacos2.2版本发布了,我为其贡献了几行代码并适配了PostgreSQL插件

    目录 一 背景 二 个人贡献 三 Nacos使用适配的PostgreSQL插件 3 1 插件源码工程项目结构 3 2 打包加载插件 3 3 修改配置文件为PostgreSQL连接字符串 3 4 导入数据库脚本文件 四 总结 一 背景 Nac