栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Nacos

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nacos

Nacos

Nacos 是阿里的一个开源产品,针对微服务架构中的 服务发现,配置管理,服务治理的综合性解决方案;

Nacos的四大特性:

  1. 服务发现与服务健康检查
  2. 动态配置管理
  3. 动态DNS服务
  4. 服务和元数据管理
1. Nacos 安装

Nacos 依赖 Java 环境运行,并且需要配置 Maven环境;

64bit JDK 1.8+

Maven 3.2.x+

step1:安装Nacos

Nacos 安装的两种方式

  1. 通过源码安装
  2. 下载编译后压缩包方式

step2:启动Nacos(Nacos默认端口为8848,启动成功后,通过 http://127.0.0.1:8848/nacos 可以成功查看到Nacos控制台页面;)默认用户名:nacos,默认密码:nacos;

1.1 Nacos 外部Mysql数据库支持

单机模式时,nacos默认使用嵌入式数据库实现数据的存储,若想使用外部mysql存储nacos数据,需要进行以下步骤:

step1:准备好mysql数据库,版本要求 5.6.5+,mysql 8以下;

step2:新建数据库nacos_config,数据库初始化文件:${nacoshome}/conf/nacos-mysql.sql(nacos安装路径下的conf文件夹的nacos-mysql.sql文件)

step3:修改${nacoshome}/conf/application.properties文件,添加mysql数据源的url、用户名和密码;

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncodeing=utf8connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

step4:重启nacos;

2. Nacos 配置管理

配置管理页面:

2.1 一个简单的Java程序获取Nacos配置信息

step1: 引入nacos-client的pom依赖

        
            com.alibaba.nacos
            nacos-client
            1.1.3
        

step2: 通过代码获取配置信息

    public static void main(String[] args) throws NacosException {
        //nacos地址
        String serverAddr = "127.0.0.1:8848";
        //DataId
        String dataId = "nacos-simple-demo.yaml";
        //Group
        String group = "DEFAULT_GROUP";

        Properties properties = new Properties();
        properties.put("serverAddr",serverAddr);
        //当properties不指定namespace属性的值时,默认取nacos的public空间下的配置;
        //properties.put("namespace属","namespaceId的值");
        ConfigService configService = NacosFactory.createConfigService(properties);
		//获取配置;
        String content = configService.getConfig(dataId,group,5000);
        System.out.println(content);
    }

2.2 Nacos 配置管理模型

对于Nacos配置管理,通过Namespace、group、Data Id能够定位到一个具体的配置集

配置文件 == 配置集(Data Id);

配置项:配置集中包含的一个个配置内容就是配置项;通常以key=value的形式存在;

命名空间(Namespace):进行不同环境的配置隔离;(开发环境,测试环境,生成环境)

2.3 Nacos配置管理应用于分布式系统

step1:创建一个微服务,引入pom依赖;

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

step2:编写配置文件 bootstrap.yml

server:
	port: 8888 启动端口
spring:
	application:
		name: wddongService
    cloud:
    	nacos:
    		server-addr: 127.0.0.1:8848 #配置中心的地址
    		file-extension: yaml # dataid 的名称就是 application的name加file-extension;==》wddongService.yaml
    		namespace: c87d879c78-XXXXXXXXXX-c-0908dsdfsdf # 命名空间的Id
    		group: DEFAULT_GROUP	# 默认组

step3:通过@Value等注解,就可以获取nacos配置文件中相关的配置了;

    @Value("${common.name}")
    private String name;

step4:通过验证我们可以发现使用@Value注解不能动态的获取nacos配置文件中最新的配置消息,在这种情况下,我们需要通过注入ConfigurableApplicationContext来动态的获取最新的配置信息(配置的动态更新)

	@Autowired
    private ConfigurableApplicationContext applicationContext;
    @GetMapping("/getConfig")
    public String test(){
        return applicationContext.getEnvironment().getProperty("common.name");
    }

step5:另外我们可以通过配置来关闭nacos的动态更新;

spring.cloud.nacos.config.refresh.enable=false 
2.4 自定义扩展data Id 配置文件

我们知道,我们的项目中通常会不止只有一个配置文件,当有多个配置文件的情况下,我们该如何引用呢?

method1:

server:
	port: 8888 启动端口
spring:
	application:
		name: wddongService
    cloud:
    	nacos:
    		server-addr: 127.0.0.1:8848 #配置中心的地址
    		file-extension: yaml # dataid 的名称就是 application的name加file-extension;==》wddongService.yaml
    		namespace: c87d879c78-XXXXXXXXXX-c-0908dsdfsdf # 命名空间的Id
    		group: DEFAULT_GROUP	# 默认组 
    		# 1. DataId 在默认组 DEFAULT_GROUP,不支持动态刷新
    		ext-config[0]:
    			data-id: ext-config-01.yml
    		# 2. DataId 不在默认组 DEFAULT_GROUP,不支持动态刷新
    		ext-config[1]:
    			data-id: ext-config-02.yml
    			group: GLOBALE_GROUP
    		# 3. DataId 不在默认组 DEFAULT_GROUP,支持动态刷新
    		ext-config[2]:
    			data-id: ext-config-03.yml
				group: REFRESH_GROUP
				refresh: true

method2:

server:
	port: 8888 启动端口
spring:
	application:
		name: wddongService
    cloud:
    	nacos:
    		server-addr: 127.0.0.1:8848 #配置中心的地址
    		file-extension: yaml # dataid 的名称就是 application的name加file-extension;==》wddongService.yaml
    		namespace: c87d879c78-XXXXXXXXXX-c-0908dsdfsdf # 命名空间的Id
    		group: TEST_GROUP	# 默认组 
			shared-dataids: ext-config-01.yml,ext-config-02.yml,ext-config-03.yml
			refreshable-detaids: ext-config-01.yml  # 支持动态刷新的配置文件
		# 通过 shared-dataids这种方式引入的多配置文件,没有 method1 方式好。这种方式只有 配置文件在 DEFAUL_GROUP组下才会生效;
2.5 多配置文件的加载顺序

ext-config[0] > ext-config[1] > ext-config[2] > file-extension;

当 ext-config[0] 和 ext-config[2] 中都配置有一个name 属性;ext-config[0].name = ‘张三’,ext-config[2].name = ‘李四’; ext-config[0] 会先被加载,ext-config[2] 的name 属性会覆盖掉之前的,所以程序最终读取到的 name 属性为 李四;(而不是张三)

3. Nacos 集群部署

step1:准备好多台nacos客户端;

step2:配置集群配置文件;(nacos目录下,有文件 cluster.conf.example,将其命名为 cluster.conf ,并将每行配置成 ip:port)

# ip:port
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

step3:修改nacos的conf 目录下 application.properties 中的ip地址(单台服务器不需修改,多服务器多ip需要修改)

nacos.inetutils.ip-address=127.0.0.1

step4:nacos 启动时,采用集群的方式启动

startup -m cluster

step5:微服务配置集群

spring:
	application:
		name: wddongService
    cloud:
    	nacos:
    		server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850 #配置中心的地址

step6:nacos 集群部署成功之后,通过页面可以观察到集群的情况;

4. 服务治理 4.1 服务治理应用于分布式系统

一个微服务项目,如何被nacos管理

step1: 引入相关依赖;


	org.springframework.cloud
    spring-cloud-starter-alibaba-nacos-discovery

step2: 编写nacos相关的配置

spring:
  application:
    name: quickstart-provider
  cloud:
    nacos:
      discovery: # 服务发现
        server-addr: nacosIp:nacosPort #配置nacosIp和nacosPort

step3: 启动类上添加服务发现注解

@EnableDiscoveryClient

step4: 启动服务后,在nacos控制台即可看到成功被治理的微服务;


step5:可以看到我们通过以上配置的方式,发布的服务是在 public 命名空间下的。当我们想切换到其他的命名空间,只需要通过修改配置文件即可;

spring:
  application:
    name: quickstart-provider
  cloud:
    nacos:
      discovery: # 服务发现
        server-addr: nacosIp:nacosPort #配置nacosIp和nacosPort
        namespace: 'namespaceId'	#配置命名空间的Id
        cluster-name: '集群的名称(自定义)'
4.2 服务管理的基本功能


可以调整集群中服务的权重,和方便快捷的控制服务上下线;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/843337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号