目录
一、 微服务的注册中⼼
1. 注册中⼼的重要作⽤
2. 常⻅的注册中⼼
二、Nacos简介
nacos实战⼊⻔
1. 搭建nacos环境
2.将订单微服务注册到nacos
2.1 在pom.xml中添加nacos的依靠
2.2 在主类上添加@EnableDiscoveryClient注解
2.3 在application.yml中添加nacos服务的地点
2.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务
3. 将商品微服务注册到nacos
3.1 在pom.xml中添加nacos的依靠
3.2 在主类上添加@EnableDiscoveryClient注解
3.3 在application.yml中添加nacos服务的地点
3.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务
4. 实现下单
三、Nacos配置管理
1. 统⼀配置管理
1.1 在nacos中添加配置⽂件
1.2 从微服务拉取配置
1.3 配置实现步骤:
1) 引⼊nacos-config依靠
2)添加bootstrap.yaml
3)在nacos中添加配置
4)测试
2. 配置热更新
2.1 方式一
2.2 ⽅式⼆
3. 配置共享
同服务内配置共享
测试dev
测试test
差别微服务共享配置
4. 配置共享的优先级
一、 微服务的注册中⼼
注 册中⼼可以说是微服务架构中的”通讯录“ ,它记录了服务和服务地点的映射关系 。在分布式架构中, 服务会注册到这⾥,当服务需要调⽤其它服务时,就这⾥找到服务的地点,进⾏调⽤。 1. 注册中⼼的重要作⽤
服务注册中⼼(下称注册中⼼)是微服务架构⾮常重要的⼀个组件,在微服务架构⾥重要起到了和谐者 的⼀个作⽤。 注册中⼼⼀般包含如下⼏个功能: 1. 服务发现:
- 服务注册/反注册:保存服务提供者和服务调⽤者的信息
- 服务订阅/取消订阅:服务调⽤者订阅服务提供者的信息,最好有及时推送的功能
- 服务路由(可选):具有筛选整合服务提供者的能⼒。
2. 服务配置:
- 配置订阅:服务提供者和服务调⽤者订阅微服务相干的配置
- 配置下发:主动将配置推送给服务提供者和服务调⽤者
3. 服务健康检测:
2. 常⻅的注册中⼼
Zookeeper zookeeper它是⼀个分布式服务框架,是Apache Hadoop 的⼀个⼦项⽬,它重要是⽤来解决分布式应⽤中经常遇到的⼀些数据管理标题,如:统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项的管理等。简单来说zookeeper=⽂件体系+监听通知机制。
Eureka Eureka是在Java语⾔上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组件 Consul Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件, 采⽤Raft算法保证服务的⼀致性,且⽀持健康检查。 Nacos Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是注册中⼼ + 配置中⼼的组合 ,提供简单易⽤的特性集,帮助我们解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等标题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀,负责服务注册与发现。 组件名语言CAP同等性算法服务健康检查对外暴露接口EurekaJavaAP无可配支持HTTPConsulGoCPRaft支持HTTP/DNSZookeeperJavaCPPaxos支持客户端NacosJavaAPRaft支持HTTP Eureka闭源影响 在Euraka的GitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继承使⽤作为 2.x 分⽀上现有⼯作 repo ⼀部分发布的代码库和⼯件,则将⾃负⻛险。 Nacos更换⽅案 二、Nacos简介
Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中⼼,⽤来管理注册上来的各个微服务 nacos实战⼊⻔
我们就在现有的环境中加⼊nacos,并将我们的两个微服务注册上去。 1. 搭建nacos环境
第1步: 安装nacos 下载地点 : https://github.com/alibaba/nacos/releases 下载 zip 格式的安装包,然后进⾏解压缩操纵 解压即安装 第2步: 启动nacos - #切换⽬录
- cd nacos/bin
- #命令启动
- startup.cmd -m standalone
- 或者直接双击startup.cmd运⾏
复制代码 第3步: 访问nacos 打开浏览器输⼊ http://localhost:8848/nacos ,即可访问服务, 默认密码是nacos/nacos 2.将订单微服务注册到nacos
开始修改 shop-product 模块的代码, 将其注册到nacos服务上 2.1 在pom.xml中添加nacos的依靠
- <!-- nacos客户端 -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
复制代码
2.2 在主类上添加@EnableDiscoveryClient注解
- @SpringBootApplication
- @EnableDiscoveryClient
- public class OrderApplication {
- public static void main(String[] args) {
- SpringApplication.run(OrderApplication.class);
- }
- @Bean
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
- }
复制代码
2.3 在application.yml中添加nacos服务的地点
- server:
- port: 8091
- spring:
- application:
- name: service-order
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
- username: root
- password: 123456
- cloud:
- nacos:
- discovery:
- server-addr: 127.0.0.1:8848
复制代码 - spring:
- profiles:
- active: dev
复制代码 这里我把dev分开写了 调用就行 也可以写一个里面
2.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务
3. 将商品微服务注册到nacos
开始修改 shop-product 模块的代码, 将其注册到nacos服务上 3.1 在pom.xml中添加nacos的依靠
- <!-- nacos客户端 -->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
复制代码
3.2 在主类上添加@EnableDiscoveryClient注解
- @SpringBootApplication
- @EnableDiscoveryClient
- public class ProductApplication {
- public static void main(String[] args) {
- SpringApplication.run(ProductApplication.class);
- }
- }
复制代码
3.3 在application.yml中添加nacos服务的地点
- server:
- port: 8081
- spring:
- application:
- name: service-product
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
- username: root
- password: 123456
- cloud:
- nacos:
- discovery:
- server-addr: 127.0.0.1:8848
复制代码
3.4 启动服务, 观察nacos的控制⾯板中是否有注册上来的商品微服务
4. 实现下单
三、Nacos配置管理
Nacos除了可以做注册中⼼,同样可以做配置管理来使⽤ 1. 统⼀配置管理
当微服务摆设的实例越来越多,到达数⼗、数百时,逐个修改微服务配置就会让⼈抓狂,⽽且很容易出错。我们需要⼀种统⼀配置管理⽅案,可以会集管理全部实例的配置。 Nacos⼀⽅⾯可以将配置会集管理,另⼀⽅可以在配置变动时,及时通知微服务,实现配置的热更新。 在业界常⻅的服务配置中⼼,有下⾯这些:
- Apollo是由携程开源的分布式配置中⼼。特点有很多,⽐如:配置更新之后可以及时⽣效,⽀持灰度发布功能,并且能对全部的配置进⾏版本管理、操纵审计等功能,提供开放平台API。并且资料也写的很具体
- Disconf是由百度开源的分布式配置中⼼。它是基于Zookeeper来实现配置变动后及时通知和⽣效的
- SpringCloud Config这是Spring Cloud中带的配置中⼼组件。它和Spring是⽆缝集成,使⽤起来⾮常⽅便,并且它的配 置存储⽀持Git。不过它没有可视化的操纵界⾯,配置的⽣效也不是及时的,需要重启或去革新。
- Nacos这是SpingCloud alibaba技能栈中的⼀个组件,前⾯我们已经使⽤它做过服务注册中⼼。其实它也集成了服务配置的功能,我们可以直接使⽤它作为服务配置中⼼。
1.1 在nacos中添加配置⽂件
1.2 从微服务拉取配置
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项⽬启动。 但如果尚未读取application.yml,⼜如何得知nacos地点呢? 因此spring引⼊了⼀种新的配置⽂件: bootstrap.yaml⽂件,会在application.yml之前被读取,流程如下: 1.3 配置实现步骤:
1) 引⼊nacos-config依靠
- <!--nacos配置中心-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
复制代码 在商品 和订单都添加坐标
2)添加bootstrap.yaml
不能使⽤原来的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 # 配置文件格式
- shared-dataids: datasource.yaml # 配置要引⼊的配置
- refreshable-dataids: datasource.yaml # 配置要实现动态配置刷新的配置
- profiles:
- active: dev # 环境标识,开发环境
复制代码 3)在nacos中添加配置
4)测试
加载成功
2. 配置热更新
我们最终的⽬的,是修改nacos中的配置后,微服务中⽆需重启即可让配置⽣效,也就是配置热更新。要实现配置热更新,可以使⽤两种⽅式: 配置中⼼添加配置
2.1 方式一
在@Value注⼊的变量所在类上添加注解@RefreshScope: - @RestController
- @RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
- public class ProductController {
- @Value("${config.appName}")
- private String appName;
- @GetMapping("/nacos-config-test1")
- public String nacosConfingTest1() {
- return appName;
- }
复制代码
如果修改的话 不需要重启服务 直接在配置中心修改配置文件即可
2.2 ⽅式⼆
硬编码⽅式
- @RestController
- public class NacosConfigController {
- @Autowired
- private ConfigurableApplicationContext applicationContext;
-
- @GetMapping("/nacos-config-test2")
- public String nacosConfingTest2() {
- return applicationContext.getEnvironment().getProperty("config.app
- Name");
- }
- }
复制代码 测试不测了
3. 配置共享
当配置越来越多的时候,我们就发现有很多配置是重复的,这时候就思量可不可以将公共配置⽂件提取出来 同服务内配置共享
实现步骤:
- 1. 新建⼀个以 spring.application.name 命名的配置⽂件,然后将其全部环境的公共配置放在⾥⾯
- 2. 新建⼀个名为service-product-test.yaml配置存放测试环境的配置
- 3. 新建⼀个名为service-product-dev.yaml配置存放开发环境的配置
- 4. 在两个环境⽂件中配置独有信息
- 5. 添加测试⽅法
- @RestController
- @RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
- public class ProductController {
- // @Value("${config.appName}")
- // private String appName;
- //
- // @GetMapping("/nacos-config-test1")
- // public String nacosConfingTest1() {
- // return appName;
- // }
- //
- @Value("${config.env}")
- private String env;
- //同一微服务的不同环境下共享配置
- @GetMapping("/nacos-config-test2")
- public String nacosConfingTest2() {
- return env;
- }
- }
复制代码
测试dev
测试test
差别微服务共享配置
差别服务之间实现配置共享的原理类似于⽂件引⼊,就是定义⼀个公共配置,然后在当前配置中引⼊ 1. 在nacos中定义⼀个DataID为datasource.yaml的配置,⽤于全部微服务共享
2. 修改bootstrap.yaml
- spring:
- application:
- name: service-product
- cloud:
- nacos:
- config:
- server-addr: 127.0.0.1:8848 #nacos中心地址
- file-extension: yaml # 配置文件格式
- shared-dataids: datasource.yaml # 配置要引⼊的配置
- refreshable-dataids: datasource.yaml # 配置要实现动态配置刷新的配置
- profiles:
- active: dev # 环境标识,开发环境
复制代码 3. 启动商品微服务进⾏测试
4. 配置共享的优先级
当nacos、服务本地同时出现相同属性时,优先级有⾼低之分:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |