开源的go语言统一配置中心 - nacos + nacos go sdk

配置文件实时更新机制的场景需求

配置文件热更新主要应用于需要在不停机的情况下动态调整系统行为的场景,例如修改服务参数、切换数据源等。其原理在于通过一个中心化的管理平台来存储和分发最新的配置信息。当配置文件发生变化时,该平台会主动或被动地通知所有相关应用实例。应用实例接收到变更通知后,将从平台拉取最新的配置内容并立即生效,从而实现热更新。

为确保配置最终一致性,通常采用版本控制机制(如MD5校验)来保证客户端与服务器之间配置的一致性。此外,还会定期执行全量同步操作,以防止因网络故障等原因导致的部分节点数据不同步问题。通过这些机制,可以有效保障即使在网络不稳定或者发生其他异常情况下,各应用实例仍能获取到一致且最新的配置文件。

Nacos:云原生应用的动态配置管理与服务发现平台

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了一系列核心优势,包括服务发现与健康检查、动态配置服务以及动态DNS服务等。在Go语言的应用中,通过Nacos提供的SDK或API,开发者能够方便地实现配置文件的热更新,无需重启服务即可生效新的配置,这极大地提高了系统的灵活性和可用性。此外,Nacos支持多环境隔离,并且具备强大的生态兼容能力,可以无缝集成到Spring Cloud、Dubbo等主流框架中,为微服务架构下的项目提供了强有力的支持。无论是对于开发效率还是运维便捷性来说,Nacos都是一个不可或缺的选择。

Nacos配置订阅示例详解

基于Nacos订阅配置更新并处理的例子(Go语言版,配置文件名为config.properties):

首先,根据我了解的信息中提供的信息了解到,Nacos的服务或配置订阅机制是独立的。这意味着,当多个服务监听相同的配置时,任何该配置的变化都会被推送给所有订阅者,而不会因为某个服务已经收到了通知就不给其他服务推送了。这为构建可靠的应用程序提供了便利,确保了不同组件能够及时获取到最新的配置信息。

下面将给出一个完整的使用Go语言实现的示样的步骤,用于演示如何从Nacos订阅config.properties配置,并在配置更新时做出相应处理。这里假设您已经安装好了Go环境以及必要的依赖库。

1. 安装nacos-go-sdk

首先,你需要安装nacos-go-sdk,这是一个用于与Nacos服务器交互的Go语言客户端库。你可以通过运行以下命令来安装它:

go get -u github.com/nacos-group/nacos-sdk-go
2. 创建主程序文件

接下来,创建你的Go应用入口点文件,比如命名为main.go。在这个文件里,你将初始化Nacos客户端、订阅特定配置,并定义配置变更时的回调函数。

main.go 内容
package mainimport ("fmt""os""time""github.com/nacos-group/nacos-sdk-go/clients""github.com/nacos-group/nacos-sdk-go/common/constant""github.com/nacos-group/nacos-sdk-go/vo"
)func main() {// Nacos服务器地址serverConfigs := []constant.ServerConfig{*constant.NewServerConfig("localhost", 8848),}// 客户端配置clientConfig := constant.ClientConfig{NamespaceId:         "public", // 命名空间IDTimeoutMs:           5000,NotLoadCacheAtStart: true,LogDir:              "/tmp/nacos/log",CacheDir:            "/tmp/nacos/cache",RotateTime:          "1h",MaxAge:              3,LogLevel:            "debug",}// 创建配置客户端configClient, err := clients.CreateConfigClient(map[string]interface{}{"serverConfigs": serverConfigs,"clientConfig":  clientConfig,})if err != nil {fmt.Println(err)os.Exit(1)}dataId := "config.properties"  // 配置文件名group := "DEFAULT_GROUP"       // 默认组// 监听配置变化err = configClient.ListenConfig(vo.ConfigParam{DataId: dataId,Group:  group,OnChange: func(namespace, group, dataId, data string) {fmt.Printf("配置发生更改:%s
新值:%s
", dataId, data)// 在这里添加对新配置数据进行处理的逻辑},})if err != nil {fmt.Println(err)return}// 让主进程保持活跃状态select {}
}

这段代码展示了如何设置一个基本的Nacos配置监听器。一旦config.properties文件的内容发生变化,OnChange回调函数就会被执行,并打印出新的配置内容。您可以在此处扩展更多的业务逻辑来处理配置更新后的具体操作。

小结:
  • 通过上述步骤,我们创建了一个简单的Go应用程序,它能够连接到本地运行的Nacos实例。

  • 应用程序订阅了一个名为config.properties的配置项,属于默认分组DEFAULT_GROUP

  • 当这个配置项的内容发生变化时,将会触发预先定义好的回调函数,在本例中仅仅是简单地打印出变更信息。在实际应用场景中,可以利用这个机会更新内存中的配置参数或者重启相关服务等操作。

  • 最后,为了让程序持续运行以便接收来自Nacos的通知,我们使用了select {}语句阻止主goroutine退出。在真实环境中,可能需要采用更优雅的方式来管理应用生命周期。

Nacos发布配置实例详解

1. 整体思路

在使用Nacos作为配置中心时,开发者需要能够通过程序实现配置的动态更新与管理。对于Go语言客户端而言,这涉及到如何初始化连接到Nacos服务、发布新配置、监听配置变更以及删除不再需要的配置等操作。根据我了解的信息中提供的信息,我们可以得知完成这些任务所需的基本方法和参数设置。

2. 具体步骤

基于上述需求,下面将提供一个完整的Go语言示例来展示如何进行配置的发布及后续处理。本示例将包括创建ClientConfig对象、建立与Nacos服务器的连接、发布新的配置文件config.properties、监听该配置的变化事件,并最后演示如何取消监听并移除配置。

  • 第一步:安装依赖
    确保已经安装了Nacos Go SDK。如果尚未安装,请运行:

    go get github.com/nacos-group/nacos-sdk-go/v2

  • 第二步:定义客户端配置

    package main

    import (
    “fmt”
    “github.com/nacos-group/nacos-sdk-go/v2/clients”
    “github.com/nacos-group/nacos-sdk-go/v2/common/constant”
    “github.com/nacos-group/nacos-sdk-go/v2/vo”
    )

    func main() {
    // 客户端配置
    clientConfig := constant.ClientConfig{
    TimeoutMs: 5000,
    NotLoadCacheAtStart: true,
    LogDir: “/tmp/nacos/log”,
    CacheDir: “/tmp/nacos/cache”,
    LogLevel: “debug”,
    Username: “nacos”, // 如果启用了鉴权,填写用户名
    Password: “nacos”, // 如果启用了鉴权,填写密码
    }

    // Nacos服务器地址列表
    serverConfigs := []constant.ServerConfig{*constant.NewServerConfig("console.nacos.io", 80, constant.WithScheme("http")),
    }// 创建配置客户端
    configClient, err := clients.NewConfigClient(vo.NacosClientParam{ClientConfig:  &clientConfig,ServerConfigs: serverConfigs,},
    )
    if err != nil {panic(err)
    }// 发布配置
    publishConfig(configClient)// 监听配置变化
    listenForChanges(configClient)// 取消监听(可选)
    cancelListening(configClient)// 删除配置(可选)
    deleteConfig(configClient)
    

    }

  • 第三步:编写辅助函数

    // 发布配置
    func publishConfig(client clients.IConfigClient) {
    _, err := client.PublishConfig(vo.ConfigParam{
    DataId: “config.properties”,
    Group: “DEFAULT_GROUP”,
    Content: “version=1.0.0
    enable=true”,
    })
    if err != nil {
    fmt.Println(“Failed to publish config:”, err)
    return
    }
    fmt.Println(“Config published successfully.”)
    }

    // 监听配置变化
    func listenForChanges(client clients.IConfigClient) {
    err := client.ListenConfig(vo.ConfigParam{
    DataId: “config.properties”,
    Group: “DEFAULT_GROUP”,
    OnChange: func(namespace, group, dataId, data string) {
    fmt.Printf("Config changed: %s, new content: %s
    ", dataId, data)
    },
    })
    if err != nil {
    fmt.Println(“Failed to start listening for changes:”, err)
    } else {
    fmt.Println(“Started listening for changes on ‘config.properties’.”)
    }
    }

    // 取消监听
    func cancelListening(client clients.IConfigClient) {
    err := client.CancelListenConfig(vo.ConfigParam{
    DataId: “config.properties”,
    Group: “DEFAULT_GROUP”,
    })
    if err != nil {
    fmt.Println(“Failed to cancel listening:”, err)
    } else {
    fmt.Println(“Cancelled listening for changes on ‘config.properties’.”)
    }
    }

    // 删除配置
    func deleteConfig(client clients.IConfigClient) {
    _, err := client.DeleteConfig(vo.ConfigParam{
    DataId: “config.properties”,
    Group: “DEFAULT_GROUP”,
    })
    if err != nil {
    fmt.Println(“Failed to delete config:”, err)
    } else {
    fmt.Println(“Deleted ‘config.properties’ configuration.”)
    }
    }

3. 小结

以上代码首先通过设置必要的配置项如超时时间、日志目录等创建了一个ClientConfig实例,并指定了Nacos服务的位置。之后,利用这个配置信息创建了一个配置客户端。接着,通过调用PublishConfig函数上传了一个名为config.properties的新配置文件至指定组。为了实时获取配置的更新,我们使用了ListenConfig功能注册了一个回调函数,在每次配置内容发生变化时都会被触发执行。最后,展示了如何取消对特定配置文件更改的监听以及如何从Nacos中彻底删除该配置。

Nacos server的单机版快速部署

1. 环境准备

首先确保你的环境满足以下要求:

  • Java环境:Nacos依赖Java运行时环境,推荐使用JDK 8+。

  • 内存与CPU:根据官方文档,至少需要2GB内存和2核CPU。

2. 下载Nacos

访问Nacos官方网站或直接从Github发布页下载最新的稳定版本。选择nacos-server-x.x.x.zip文件下载并解压缩到你希望安装的位置。

3. 配置Nacos

对于一个简单的单机模式部署,你可以选择使用默认配置,这将使Nacos使用内置的Derby数据库进行存储。如果你想要更灵活的配置,比如使用外部MySQL作为数据源,可以按照下面步骤操作:

使用内置Derby数据库
  • 解压后的目录中,进入conf文件夹找到application.properties,确认其内容为默认配置(即没有修改数据库相关的设置)。

  • 默认情况下,不需要对这个文件做任何修改,因为Nacos会自动使用内置的Derby数据库。

使用外部MySQL数据库
  1. 安装MySQL数据库,并确保版本不低于5.6.5。

  2. 执行提供的SQL脚本初始化数据库结构,该脚本可以在Nacos GitHub仓库找到。

  3. 修改conf/application.properties中的数据库连接信息,包括数据库URL、用户名及密码等字段。示例配置如下:

    spring.sql.init.platform=mysql

    db.num=1
    db.url.0=jdbc:mysql:// m y s q l h o s t : {mysql_host}: mysqlhost:{mysql_port}/KaTeX parse error: Expected 'EOF', got '&' at position 40: …erEncoding=utf8&̲connectTimeout=…{mysql_user}
    db.password=${mysql_password}

${...}替换为你实际使用的值。

4. 启动Nacos

打开命令行工具,切换至Nacos解压后的根目录,执行如下命令来启动Nacos服务:

sh bin/startup.sh -m standalone

在Windows系统下,应该使用cmd.exe /c startup.cmd -m standalone

5. 访问Nacos控制台

成功启动后,可以通过浏览器访问http://localhost:8848/nacos,默认登录账号密码均为nacos。此时你已经完成了一个基础的Nacos单节点部署。

通过上述步骤,您就能够迅速搭建起一个可用于开发测试环境的Nacos单机版实例。对于生产环境下的部署,建议参考官方提供的集群部署指南以提高系统的可用性和稳定性。

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

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

相关文章

Redis--如何保障缓存数据库一致性?(面试高频问题)

如何保障缓存数据库一致性? 数据库和缓存不一致采用什么方案?实现商铺和缓存与数据库双写一致背景点评项目使用了什么策略? 存在什么问题?延迟双删(强一致场景)分布式锁(强一致场景)…

【Python系列】Python 连接 PostgreSQL 数据库并查询数据

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

Spring5.1.3 @Autorwired注解原理重新回顾

直接用一些例子代码说明Autorwired的工作原理,Spring版本为5.1.3 。 一般认为Autorwired是自动注入的,但实际不是,和byName, byType等自动注入没有任何关系。 Ca & Cb & Cc 三个类 Ca public class Ca {public Ca(){System.out.p…

Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件

Linux Debian12基于ImageMagick图像处理工具编写shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件,”多个图片分开生成多个PDF文件“或者“多个图片合并生成一个PDF文件” BiliBili视频链接: Linux shell脚本对常见图片格式批量转换…

Linux应用软件编程-多任务处理(进程)

多任务:让系统具备同时处理多个事件的能力。让系统具备并发性能。方法:进程和线程。这里先讲进程。 进程(process):正在执行的程序,执行过程中需要消耗内存和CPU。 进程的创建:操作系统在进程创…

119.【C语言】数据结构之快速排序(调用库函数)

目录 1.C语言快速排序的库函数 1.使用qsort函数前先包含头文件 2.qsort的四个参数 3.qsort函数使用 对int类型的数据排序 运行结果 对char类型的数据排序 运行结果 对浮点型数据排序 运行结果 2.题外话:函数名的本质 1.C语言快速排序的库函数 cplusplus网的介绍 ht…

Element-ui table组件:单元格未溢出,悬浮出现popover提示框

问题视图: 问题定位: 源码中,给开启溢出提示的列单元格都添加了class,并且宽度为实际列宽-1。 若单元格内容宽度100%撑开,则会计算为溢出情况。 处理方法: 单元格内容宽度设置100%-1。

Llama 3 预训练(二)

目录 3. 预训练 3.1 预训练数据 3.1.1 网络数据筛选 PII 和安全过滤 文本提取与清理 去重(De-duplication) 启发式过滤(Heuristic Filtering) 基于模型的质量过滤 代码和数学推理数据处理 多语言数据处理 3.1.2 确定数…

打破视障壁垒,百度文心快码无障碍版本助力视障IT从业者就业无“碍”

有AI无碍 钟科:被黑暗卡住的开发梦 提起视障群体的就业,绝大部分人可能只能想到盲人按摩。但你知道吗?视障人士也能写代码。 钟科,一个曾经“被黑暗困住”的人,他的世界,因为一场突如其来的疾病&#xff0c…

黑马Java面试教程_P9_JVM虚拟机

系列博客目录 文章目录 系列博客目录前言1. JVM组成1.1 JVM由那些部分组成,运行流程是什么?3 41.2 什么是程序计数器?3 4总结 1.3 你能给我详细的介绍Java堆吗? 3 4总结 1.4 什么是虚拟机栈 3 4总结 1.6 能不能解释一下方法区? 3…

修改 ssh 默认访问端口

Linux 最小化安装后默认带有 ssh 服务并正常运行,服务默认端口为“22”。为了确保访问网络的安全,很多用户的网络设备对“22”端口做了限制,这时我们需要修改 ssh 服务默认的端口。 此步骤建议直接在服务器上通过鼠标键盘操作 修改配置文件 …

新手SEO指南如何快速入门与提升网站排名

内容概要 搜索引擎优化(SEO)是提高网站可见度和排名的重要手段,尤其对新手来说,掌握其基本概念和实用技巧至关重要。本文将针对新手提供一系列的指导,帮助你快速入门并逐步提升网站排名。 首先,了解SEO的…

Springboot高并发乐观锁

Spring Boot分布式锁的主要缺点包括但不限于以下几点: 性能开销:使用分布式锁通常涉及到网络通信,这会引入额外的延迟和性能开销。例如,当使用Redis或Zookeeper实现分布式锁时,每次获取或释放锁都需要与这些服务进行交…

18.springcloud_openfeign之扩展组件二

文章目录 一、前言二、子容器默认组件FeignClientsConfigurationDecoder的注入Contract约定 对注解的支持对类上注解的支持对方法上注解的支持对参数上注解的支持MatrixVariablePathVariableRequestParamRequestHeaderSpringQueryMapRequestPartCookieValue FormattingConversi…

圆排列C++

Description 给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n3,且所给的3个圆的半径分别为1,1&a…

【玩转OCR】 | 腾讯云智能结构化OCR在多场景的实际应用与体验

文章目录 引言产品简介产品功能产品优势 API调用与场景实践图像增强API调用实例发票API调用实例其他场景 结语相关链接 引言 在数字化信息处理的时代,如何高效、精准地提取和结构化各类文档数据成为了企业和政府部门的重要需求。尤其是在面对海量票据、证件、表单和…

AEO海关认证的注意事项

AEO海关认证的注意事项繁多且至关重要,企业需细致准备,确保万无一失。 首先,企业需深入研读相关政策文件,如《中华人民共和国海关注册登记和备案企业信用管理办法》及《海关高级认证企业标准》,以政策为指引&#xff0…

使用Excel制作通达信自定义外部数据,安排!!!

Excel相信大家电脑上都有这个工具,相比敲编程代码,用这个去做自定义数据对大多数人,应该是比较友好的。自定义数据分为外部序列数据,看了一下内容理解起来比较多,分两期给大家介绍。为了照顾电脑基础薄弱的朋友&#x…

使用c#制作坐标

1、建立坐标 2、坐标系的放大缩小 3、标定刻度 4、实时显示鼠标在坐标系上的坐标 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using S…

计算属性 简写和 完整写法

计算属性渲染不加上括号 methods方法和computed属性区别: computed只计算一次,然后缓存,后续直接拿出来使用,而methods每次使用每次计算,不会缓存 计算属性完整写法: 既获取又设置 slice 截取 成绩案例 …