Nacos

Nacos Discovery–服务治理

先来思考一个问题

微服务之间的调用,我们把服务提供者的网络地址(ip,端口)等硬编码到了代码中,这种做法存在许多问题:

  • 一旦服务提供者地址变化,就需要手工修改代码
  • 一旦是多个服务提供者,无法实现负载均衡功能
  • 一旦服务变得越来越多,人工维护调用关系困难

那么应该怎么解决呢, 这时候就需要通过注册中心动态的实现服务治理。

什么是服务治理

服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现

  • 服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
  • 服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实 例的访问。
    在这里插入图片描述
    通过上面的调用图会发现,除了微服务,还有一个组件是服务注册中心,它是微服务架构非常重要 的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:
    1.服务发现:
    服务注册:保存服务提供者和服务调用者的信息
    服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息
    2.服务配置:
    配置订阅:服务提供者和服务调用者订阅微服务相关的配置配置下发:主动将配置推送给服务提供者和服务调用者
    3.服务健康检测
    检测服务提供者的健康情况,如果发现异常,执行服务剔除

Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config。

搭建nacos环境

第1步: 安装nacos
下载地址: https://github.com/alibaba/nacos/releases
下载zip格式的安装包,然后进行解压缩操作

第2步: 启动nacos

#切换目录
cd nacos/bin #命令启动
startup.cmd -m standalone

第3步: 访问nacos
打开浏览器输入http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos
在这里插入图片描述

微服务注册到nacos

接下来开始修改shop-product 模块的代码, 将其注册到nacos服务上
1 在pom.xml中添加nacos的依赖

<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2 在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication 
@EnableDiscoveryClient
public class ProductApplication{
}

3 在application.yml中添加nacos服务的地址


spring: 
	cloud:
		nacos:
			discovery:
				server-addr: 127.0.0.1:8848

4 启动服务, 观察nacos的控制面板中是否有注册上来的商品微服务

Nacos Config–服务配置

首先我们来看一下,微服务架构下关于配置文件的一些问题:
1.配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散 在各个微服务中,不好统一配置和管理。

2.配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环 境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动 维护,这比较困难。

3.配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一 个正在运行的项目来说是非常不友好的。

基于上面这些问题,我们就需要配置中心的加入来解决这些问题。

配置中心的思路是:

  • 首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。
  • 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。
  • 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动 态更新。

当加入了服务配置中心之后,我们的系统架构图会变成下面这样:
在这里插入图片描述

Nacos Config入门

1、在微服务中引入nacos的依赖

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

2、在微服务中添加nacos config的配置
注意:不能使用原来的application.yml作为配置文件,而是新建一个bootstrap.yml作为配置文件
配置文件优先级(由高到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

spring: 
	application:
		name: service-product 
	cloud:
		nacos:
			config:
				server-addr: 127.0.0.1:8848 #nacos中心地址
				file-extension: yaml # 配置文件格式
	profiles:
		active: dev # 环境标识

3、在nacos中添加配置
点击配置列表,点击右边+号,新建配置。在新建配置过程中,要注意下面的细节:
1)Data ID不能随便写,要跟配置文件中的对应,对应关系如图所示
2)配置文件格式要跟配置文件的格式对应,且目前仅仅支持YAML和Properties
3)配置内容按照上面选定的格式书写
在这里插入图片描述
4、注释本地的application.yaml中的内容, 启动程序进行测试
如果依旧可以成功访问程序,说明我们nacos的配置中心功能已经实现

配置动态刷新

在入门案例中,我们实现了配置的远程存放,但是此时如果修改了配置,我们的程序是无法读取到 的,因此,我们需要开启配置的动态刷新功能。
在nacos中的service-product-dev.yaml配置项中添加下面配置:

config:
	appName: product
@RestController
@RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
public class NacosConfigController {
	@Value("${config.appName}") private String appName;
	//2 注解方式
	@GetMapping("/nacos-config-test2") public String nacosConfingTest2() {
	return appName;
	}
}

配置共享

当配置越来越多的时候,我们就发现有很多配置是重复的,这时候就考虑可不可以将公共配置文件 提取出来,然后实现共享呢?当然是可以的。接下来我们就来探讨如何实现这一功能。

同一个微服务的不同环境之间共享配置

如果想在同一个微服务的不同环境之间实现配置共享,其实很简单。
只需要提取一个以spring.application.name 命名的配置文件,然后将其所有环境的公共配置放在里面即可。

1、新建一个名为service-product.yaml配置存放商品微服务的公共配置
在这里插入图片描述

2、新建一个名为service-product-test.yaml配置存放测试环境的配置
3、新建一个名为service-product-dev.yaml配置存放开发环境的配置
在这里插入图片描述
4、添加测试方法

@RestController 
@RefreshScope
public class NacosConfigController { 
	@Value("${config.env}")
	private String env;
	
	//3 同一微服务的不同环境下共享配置
	@GetMapping("/nacos-config-test3") 
	public String nacosConfingTest3() {
		return env;
	}
}

5、访问测试
在这里插入图片描述
6、接下来,修改bootstrap.yml中的配置,将active设置成test,再次访问,观察结果

spring: 
	profiles:
		active: test # 环境标识
不同微服务中间共享配置

不同为服务之间实现配置共享的原理类似于文件引入,就是定义一个公共配置,然后在当前配置中引
入。

1、在nacos中定义一个DataID为all-service.yaml的配置,用于所有微服务共享

spring: 
	datasource:
		driver-class-name: com.mysql.jdbc.Driver 
		url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true username: root
		password: root 
	jpa:
		properties: 
			hibernate:
				hbm2ddl:
					auto: update
				dialect: org.hibernate.dialect.MySQL5InnoDBDialect 
	cloud:
		nacos:
			discovery:
				server-addr: 127.0.0.1:8848

2 、在nacos的中修改service-product.yaml中为下面内容

server: 
	port: 8081
config:
	appName: product

3、修改bootstrap.yaml

spring: 
	application:
		name: service-product 
	cloud:
		nacos:
			config:
				server-addr: 127.0.0.1:8848 #nacos中心地址file-extension: yaml # 配置文件格式
				shared-dataids: all-service.yaml # 配置要引入的配置
				refreshable-dataids: all-service.yaml # 配置要实现动态配置刷新的配置
	profiles:
		active: dev # 环境标识

4 、启动商品微服务进行测试

nacos的几个概念

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个不回家的男人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值