首页 > 其他分享 >阿里Nacos配置中心简单使用

阿里Nacos配置中心简单使用

时间:2023-08-26 17:34:03浏览次数:75  
标签:name 配置 Nacos server 8848 阿里 nacos

简介

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助你发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助你快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助你更敏捷和容易地构建、交付和管理微服务平台。

运行前准备

数据库初始化

image

将 nacos-mysql.sql 在自己的数据库初始化

本地jar运行

下载及运行

下载地址
包含源码和打包好的压缩包,运行nacos-server中的 start.cmd 需要配置 JAVA_HOME 环境变量,实际运行的是target下的server.jar,最终运行的是nacos-console中的Nacos类。

运行遇到的问题

问题1
"nacos is starting with cluster"
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

内存不足,需要2G,可以修改start.cmd中的启动参数

    set "NACOS_JVM_OPTS=-server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"

将Xms2g改为Xms1g。

问题2
ErrMsg:jmenv.tbsite.net

默认是集群运行,需要单机运行

start.cmd -m standalone
问题3
UnsupportedOperationException:Cannot determin JNI Library name for ARCH='x86' OS='windows 10' name='rocksdb'

本地的jdk版本有问题,使用的是32位的版本,需要使用64位的。

源码运行

修改数据库连接参数

nacos-console下的application.properties文件

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://xxx:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=10000&autoReconnect=true
db.user=xxx
db.password=xxx

添加启动参数 -Dnacos.standalone=true,运行nacos-console子项目下的Nacos启动类。

nacos默认使用内置数据库apache的derby数据库。如果配置了spring.datasource.platform=mysql,就使用外部数据库mysql。具体逻辑判断在 DynamicDataSource 和 PropertyUtil 类中。NacosDefaultPropertySourceEnvironmentPostProcessor 会查找META-INF\nacos-default.properties文件,其中包含很多默认属性,如服务器端口server.port=8848,如果设置了自定义配置,就会覆盖默认的。

源码编译错误

Error:(21, 44) java: 程序包com.alibaba.nacos.consistency.entity不存在

image

IDEA中通过protobuf插件编译一下

通过docker运行

下载镜像

docker pull nacos/nacos-server:2.0.2

运行

docker run -d --name nacos-server \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=ip \
-e MYSQL_SERVICE_PORT=port \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=pwd \
-e MYSQL_DATABASE_NUM=1 \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-p 8848:8848 nacos/nacos-server:2.0.2

启动参数可以参考nacos-server-docker镜像仓库

后台操作

开启服务器防火墙的 8848 端口限制,浏览器访问 http://ip:8848/nacos,默认账号密码 nacos/nacos。

image

给客户端添加配置

  • namespace: 相当于环境,可以为dev,test,pro等
  • dataId: 相当于项目,例如myadmin
  • group: 相当于项目的分组,基本不用
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  <version>2.2.1.RELEASE</version>
</dependency>

bootstrap.yml

spring:
  application:
    name: myadmin
  cloud:
    nacos:
      config:
        server-addr: http://localhost:8848
        namespace: 2a055716-5400-4fd5-b580-afc1eacfec91 #命名空间ID
        file-extension: yaml
        enabled: true
        name: ${spring.application.name}

开启客户端鉴权

nacos-console的application.properties中

nacos.core.auth.enabled=true

image
先创建用户,再给用户创建角色,再给角色绑定权限(命名空间)

客户端

spring:
  application:
    name: demo1
  cloud:
    nacos:
      config:
        server-addr: http://ip:8848
        namespace: d8b0df04-aa58-4a5b-b582-7d133b9e8b2c        #命名空间ID
        username: nacos
        password: nacos
        extension-configs:
          - data-id: server.yaml
            refresh: true

原理

客户端读取配置

  1. NacosConfigBootstrapConfiguration注入NacosPropertySourceLocator类(具体读取配置),是为了兼容spring-cloud的读取配置中心的规则。
  2. NacosPropertySourceLocator类内部通过NacosConfigService类来发送请求读取配置
http://localhost:8848/nacos/v1/cs/configs

自动刷新

@Data
@Component
@RefreshScope
public class UserProperties {
    @Value("${myuser.name}")
    private String name;
}
@RestController
@RequestMapping("/test")
@Api(tags = "测试接口")
@Slf4j
public class TestController {

    @Autowired
    private UserProperties userProperties;
    
    @GetMapping("/testRefreshQuery")
    @ApiOperation("测试刷新对象查询")
    public String testRefreshQuery() {
        return userProperties.getName();
    }

}
客户端

主要原理就是客户端定时通过长轮训去服务端拉取数据。

  1. NacosContextRefresher监听ApplicationReadyEvent事件,注册Nacos配置改变的事件监听器(AbstractSharedListener的匿名子类)
  2. NacosConfigService中的ClientWorker会开启一个定时任务
  3. LongPollingRunnable为具体的长轮训任务,具体为checkUpdateDataIds()方法
  4. 请求头Long-Pulling-Timeout设置超时时间30秒。
  5. 获取到配置改变之后就会通知监听器
  6. 监听器发布RefreshEvent时间
  7. RefreshEventListener处理此事件,调用ContextRefresher的refresh()方法。
  8. 之后就是SpringCloud的自动刷新机制了(@RefreshScope注解)。
http://localhost:8848/nacos/v1/cs/configs/listener

Nacos配置中心集群原理及源码分析
Nacos配置中心原理

标签:name,配置,Nacos,server,8848,阿里,nacos
From: https://www.cnblogs.com/strongmore/p/17131275.html

相关文章

  • Nacos漏洞总结
    Nacos简介Nacos是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。复现环境搭建本次复......
  • Nacos笔记(六):Nacos应用 - 注册中心、配置中心
    Nacos官网:https://nacos.io/zh-cn/index.html。Nacos注册中心/配置中心搭建官方文档地址:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html。1、注册中心Nacos注册中心原理图:  1.1、项目搭建创建新项目,项目结构如下:  父......
  • VSCODE工具 VUE代码格式化插件及配置
    1.安装插件1.1Prettier它通过解析代码并使用自己的规则重新打印它,并考虑最大行长来强制执行一致的样式,并在必要时包装代码。如今,它已成为解决所有代码格式问题的优选方案;支持JavaScript、Flow、TypeScript、CSS、SCSS、Less、JSX、Vue、GraphQL、JSON、Markdown等语......
  • 基于LXD搭建实验室GPU服务器(一)——宿主机的基本配置
    从零搭建服务器是一个看似简单实则有些繁琐的操作,本文旨在记录并整合这些操作,使得后续搭建可以成为一个流水线般简单流程的过程。操作系统的安装过程网络上资源非常多,本文不再赘述。本文将对刚安装的ubuntu20.04.06操作系统进行基本配置。换源由于GFW的存在,因此需要先对apt进......
  • 网络配置之 vlan
    什么是广播域概念:能够接收到同样广播消息的网络节点的集合缺陷:当同一个广播域内广播报文过多时,会对局域网造成干扰,导致网络延迟,网络拥塞(上网卡,上网慢),严重情况可以造成广播风暴,导致网络瘫痪,给网络的可靠性和安全性带来了严重挑战。2、如何解决广播1)利用路由器分割广播域:路......
  • 磁盘配置的3种模式
    磁盘置备的3种模式,工作中在VMwareEsxi上虚拟服务器配置虚拟硬件、威联通NAS磁盘配置上遇到过。下面介绍一下这3种模式 所谓磁盘置备,就是磁盘空间分配的技术。精简置备厚置备(延迟置零):假如说新分配的硬盘上有数据存在,配置完后硬盘上有新数据产生时,新数据会逐渐覆盖硬盘上的旧......
  • 阿里云将关停代销业务
    我是卢松松,点点上面的头像,欢迎关注我哦!阿里云自从逐渐分拆独立之后,做了很多调整。最近它又做了一个大动作:据DoNews消息,阿里云将会在今年9月30日之前,全面关停代销业务。这件事实际上始于今年4月份,阿里云当时已开始通知其经销商。这些经销商早已有所准备。然而,至于为何决定终止代销业......
  • 一份基本的VIM配置
    """"""""""""""""""""""""""""""""""""""""""&qu......
  • Django 中实现上传图片配置
    models文件创建的字段模型,类型为ImageField,在ImageField中添加以下代码(如果该文件夹不存在则自动创建) settings文件代码如下  url配置 ......
  • m基于FPGA的多径信道模拟verilog实现,包含testbench,可配置SNR,频偏,多径增益和多径延
    1.算法仿真效果其中Vivado2019.2仿真结果如下:  2.算法涉及理论知识概要       瑞利分布是一个均值为0,方差为σ²的平稳窄带高斯过程,其包络的一维分布是瑞利分布。其表达式及概率密度如图所示。瑞利分布是最常见的用于描述平坦衰落信号接收包络或独立多径分量接受......