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

news2024/11/17 14:34:05

目录

一、背景

二、个人贡献

三、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 排名全国第六,作为基础类型云原生中间件,能有如此活跃度是非常不容易的。

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

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

相关文章

计算机毕设Python+Vue心灵治愈服务平台(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C++那些事之高效率开发C++/C

1.神器 目前开发C/C用的比较多的当属Vim、VS code、CLion。 Vim配上插件编写C/C效率高的不少。 VSCode配上自定义配置及快捷键、vim插件效率跟vim旗鼓相当。 CLion因其独特的CMakeLists.txt管理方式及强大的代码补全等功能,编写本地代码绝对好于前两者。 但是对…

什么是数据指标体系?

定义 对当前业务有参考价值的统计数据 作用 监控业务情况 通过拆解指标寻找当前业务问题 评估业务可改进的地方,找出下一步工作的方向 常用数据指标 谁:用户数据 干了什么:行为数据 结果怎样:业务数据 选好数据指标的通用…

大数据学习:学生排序

文章目录一、提出任务二、任务过程(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录(二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建学生实体类5、创建学生映射器类5、创建学生归并器类6…

Python变量类型教程

变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小…

Springboot跨域处理的几种方式

作者简介 作者名:编程界小明哥 简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注&…

基于springboot+mybatis的制造行业供应链管理系统

一、项目简介 基于springbootmybatis的制造行业供应链管理系统 二、实现功能 支持基础数据、用户管理、职务管理、修改密码、客户账号管理、组织管理 物料管理、物料短码、物料短码查询、物料分类维护 项目类别维护、分配采购员、设置最大最小库存、物料检验项管理 部门管…

Elasticsearch入门、API操作

文章目录概念倒排索引es的一些概念安装ES、Kibana总结索引库操作mapping映射属性创建索引库和映射查询索引库修改索引库删除索引库总结文档操作新增文档查询文档删除文档修改文档全量修改增量修改RestAPI引入依赖、初始化RestClient索引库 操作创建索引库删除索引库判断索引库是…

[附源码]Python计算机毕业设计黑河学院校友交流网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

ABBYY2023PDF及OCR文字识别软件

ABBYY FineReader PDF2023最新版使专业人士在数字化工作场所能够更大限度地提高效率。 FineReader PDF 的特色是采用了 ABBYY 新推出的基于 AI的OCR 技术,可以更轻松地在同一工作流程中对各种文档进行数字化、检索、编辑、加密、共享和协作。 现在,信息工…

U盘安装CentOS7

官网找到CentOS7的ISO镜像:CentOS-7-x86_64-DVD-2207-02.iso(大小4.42G) 准备一个8G的U盘,格式化,然后通过UltraISO工具将ISO镜像写入到U盘。 接着开机启动U盘,华硕是按esc键。 选择install cenetos7 li…

【图像处理】打靶仿真系统【含GUI Matlab源码 1043期】

⛄一、打靶仿真系统简介 1 课题描述 2 课题建模过程 a)第一,获取武器的各个参数,并且由这些参数计算武器在方向和高低上的响应公算偏差; b)第二,射击过程中方向和高低上的偏差呈正态分布。在matlab中取normrnd函数实现改功能&am…

《C语言深度解剖》二 static

最名不副实的关键字 static 认识多文件如下 extern 需要extern先声明在使用 生命没有开辟空间!100 在main.c里 所有的变量声明的时候,不能设置初始值 为什么要有头文件 头文件要包含 变量的声明int g_val 函数的声明void show(),没有函数的声明虽然可…

CentOS7配置VNC远程桌面

桌面还是有很多方便的地方,在用U盘给电脑安装了centos7(带gnome)后,接着就需要弄远程桌面。 (1)安装vncserver yum -y install tigervnc* (2)启动vnc服务 vncserver &#xff0…

[paddledet][深度学习][原创]paddledet打印出FLops正确方法

第一步:去PaddleDetection\configs\runtime.yaml将print_flops设置true 在paddle环境安装paddleslim,我是paddlepaddle-gpu2.3.2但是我安装paddleslim2.4.0会报错 ImportError: cannot import name _legacy_C_ops from paddle 然后我换成2.3.4版本就好了…

第二十六天:Denoising Diffusion Probabilistic Models(DDPM)

摘要 我们使用扩散概率模型提出了高质量的图像合成结果,这是一类latent variable模型,灵感来自非平衡热力学。我们最好的结果是通过训练weighted variational bound ,根据新颖的连接扩散概率模型和去噪分数匹配朗之万动力学进行设计&#xf…

【记录】props和data响应式、watch初始化..谁先执行【Vue父子组件生命执行周期】

文章目录一 、 总结1-1 源码中清楚写明:1-2二、 本次遇到的问题: 父传子props,子组件无法在mounted处理2-1 代码如下2-2一 、 总结 1-1 源码中清楚写明: 1、 组件初始化的时候,created,props,data…执行先…

生物素-二硫键-琥珀酰亚胺酯 Biotin-SS-NHS CAS:142439-92-7 具有良好的水溶性

名称:生物素-二硫键-琥珀酰亚胺酯 英文简称:BIOTIN-SS-NHS;NHS-SS-Biotin CAS:122266-55-1 结构式: Biotin-SS-NHS ester结构式 分子式:C19H28N4O6S3 分子量:504.64 纯度:95% …

Python之threading: 带你了解多线程的强大威力!

前言 什么是多线程 多线程是指在一个程序中同时创建和使用多个执行流(thread)来执行不同的任务。这样多个任务就可以同时进行,从而提高程序的执行效率。 在python使用多线程的方法 在 Python 中有两种方法可以使用多线程:使用 Python 自带的 threadin…

Redis Java 客户端工具 - Lettuce框架介绍

Redis Java 客户端 - Lettuce 今天学习下Redis Java客户端开源项目 - Lettuce&#xff0c;Lettuce支持同步、异步通信的方式 API调用&#xff0c;也支持响应式编程API&#xff0c;包括发布/订阅消息、高可用性服务部署架构。 开始之旅 Maven依赖 <dependency><gro…