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依赖

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.3</version>
        </dependency>

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依赖;

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

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: 引入相关依赖;

<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

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 服务管理的基本功能

在这里插入图片描述
可以调整集群中服务的权重,和方便快捷的控制服务上下线;

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王叮咚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值