700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > SpringCloud Alibaba-Nacos

SpringCloud Alibaba-Nacos

时间:2021-05-07 16:09:15

相关推荐

SpringCloud Alibaba-Nacos

SpringCloud Alibaba-Nacos

1.Nacos 基础

1.官网

/alibaba/Nacos

2.Nacos 是什么?

1.一句话: Nacos 就是注册中心[替代 Eureka]+配置中心[替代 Config]

2.Nacos:Dynamic Naming and Configuration Service

3.Nacos:架构理论基础: CAP 理论 (支持 AP 和 CP, 可以切换)

3.Nacos 下载&运行

1.下载: /alibaba/nacos/releases/tag/1.2.1

2.环境要求: Java8/Maven 3.2.x+

3.解压,运行 bin/startup.cmd

4.浏览器 http://localhost:8848/nacos

5.用户名/密码 为 nacos

2.创建 Nacos 服务提供者

1.需求说明/图解

– 示意图

2.代码实现

1.创建 member-service-nacos-provider-10004 并注册到 NacosServer8848

2.引入依赖

<!--引入nacos-starter nacos的场景启动器--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-discovery</artifactId></dependency>

3.修改yaml

server:port: 10004spring:application:name: member-service-nacos-provider #配置应用的名称#配置nacoscloud:nacos:discovery:#配置nacos Server地址,localhost-nacos部署的服务器ip 8848-服务器端口server-addr: localhost:8848#配置暴露所有的监控点management:endpoints:web:exposure:include: '*'

4.主启动类

//@EnableDiscoveryClient引入nacos发现注解@EnableDiscoveryClient@MapperScan(basePackages = {"com.llp.springcloud.dao"})@SpringBootApplicationpublic class MemberNacosProviderApplication10004 {public static void main(String[] args) {SpringApplication.run(MemberNacosProviderApplication10004.class, args);}}

5.创建 member-service-nacos-provider-10006 并注册到 NacosServer8848,同上

6.启动测试

3.创建Nacos的服务消费者

1.需求说明/图解

– 示意图

2.创建 member-service-nacos-consumer-80 并注册到 NacosServer8848

1.创建 member-service-nacos-consumer-80

2.修改 pom.xml

<!--引入alibaba-nacos场景启动器--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

3.创建 application.yml

server:port: 80spring:application:name: member-service-nacos-consumer-80#配置nacoscloud:nacos:discovery:#配置nacos Server地址,localhost-nacos部署的服务器ip 8848-服务器端口server-addr: localhost:8848

4.创建主启动类

//启用nacos发现注解@EnableDiscoveryClient@SpringBootApplicationpublic class MemberNacosConsumerApplication80 {public static void main(String[] args) {SpringApplication.run(MemberNacosConsumerApplication80.class,args);}}

5.业务类

(1)配置类

@Configurationpublic class CustomizationBean {// 配置注入RestTemplate bean/对象//这里的@LoadBalanced 就是赋予 RestTemplate 负载均衡的能力//默认是使用轮询算法来访问远程调用接口/地址@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}

(2)controller测试类

@Slf4j@RestController@RequiredArgsConstructorpublic class MemberNacosConsumerController {//定义一个服务端基础地址//http://member-service-nacos-provider 就是服务提供方注册到Nacos server的服务吗,和eureka不同这里注册到nacos服务名是小写的public static final String MEMBER_SERVICE_PROVIDER_URL = "http://member-service-nacos-provider";//配置RestTemplateprivate final RestTemplate restTemplate;//添加member@PostMapping("/member/nacos/consumer/save")public Result save(Member member) {log.info("member:{}", member);/*** url:请求的完整地址* member:通过restTemplate发出的post请求携带的数据* Result.class: 返回对象类型* 注意:restTemplate底层发送数据是通过json字符串进行传输的,服务端接受数据需要加上@RequestBody注解才能解析数据* 传输的数据通过流进行传输,需要实现序列化接口*/return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);}//查询member@GetMapping("/member/nacos/consumer/get/{id}")public Result<Member> getMemberById(@PathVariable("id") Long id) {return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member//get/" + id, Result.class);}}

6.启动测试

7.配置自己的负载均衡算法,Nacos集成了ribbon可以直接使用

@Configurationpublic class RibbonRule {@Beanpublic IRule myRibbon(){return new RandomRule();}}

4.Nacos AP 和 CP 切换-理论

1.各种注册中心对比

2.选择 AP 还是 CP?

1、CP: 服务可以不能用,但必须要保证数据的一致性。

2、AP: 数据可以短暂不一致,但最终是需要一致的,无论如何都要保证服务的可用。

3、取舍:只能在 CP 和 AP 选择一个平衡点, 大多数都是选择 AP 模式

3.AP 和 CP 切换

1.说明

(1) Nacos 集群默认支持的是CAP原则中的AP原则,但是也可切换为CP原则(一般不切 换)

(2) CURL切换命令: curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’

(3) URL指令: $NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

2.参考: /p/c56e22c222bb

5.Nacos 配置中心实例

1.需求分析/图解

– 示意图

2.在 Nacos Server 加入配置

进入到 Nacos Server加入配置, 注意: 文件后缀.yaml

e-commerce-nacos-config-client-dev.yaml

3.创建 Nacos 配置客户端模块 e-commerce-nacos-config-client5000

1.创建 Module,创建 e-commerce-nacos-config-client5000 模块

2.修改 pom.xml

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

3.创建 application.yml

spring:profiles:#指定环境,场景的环境dev/test/prodactive: dev

4.创建 bootstrap.yml

server:port: 5000spring:application:#这里的name需要参考nacos 配置中心的Data Idname: e-commerce-nacos-config-clientcloud:#配置nacosnacos:discovery:#服务注册中心地址server-addr: localhost:8848config:#配置中心地址,注意实际开发中配置中心的地址和注册中心的地址可能是分离的server-addr: localhost:8848#指定yaml格式的配置file-extension: yaml#说明#1. nacos 配置客户端/当前的微服务模块, 会根据配置,找到配置中心的数据(配置文件)#2. config.server-addr: localhost:8848 可以找到配置中心#3. spring.application.name 对应是DataId e-commerce-nacos-config#4. 在application.yml: 配置 spring.profiles.active dev#5. spring.cloud.nacos.config.file-extension 配置文件的扩展名 .yaml#6. 小结: 根据配置 就是 到 localhost:8848 下的 e-commerce-nacos-config-client.yaml# 获取配置信息/数据#7. 规则就是: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}# 来定位配置中心的 Data ID

5.主启动类

@SpringBootApplication@EnableDiscoveryClientpublic class NacosConfigClientApplication5000 {public static void main(String[] args) {SpringApplication.run(NacosConfigClientApplication5000.class,args);}}

6.业务类

@Slf4j//配置信息发生改变,自动刷新@RefreshScope@RestControllerpublic class NacosConfigClientController {/*** 1. client 会拉取nacos server 的 e-commerce-nacos-config-client-dev.yaml* config:*ip: "192.168.109.1""*name: "llp"* 2. @Value("${config.ip}") 会将 config.ip 赋给 configIp* 3. 这里${config.ip} 根据nacos配置内容来的*/@Value("${config.ip}")private String configIp;@Value("${config.name}")private String configName;@GetMapping("/nacos/config/ip")public String getConfigIp(){return configIp;}@GetMapping("/nacos/config/name")public String getConfigName(){return configName;}}

7.测试

8.注意事项和细节

配置文件 application.yml 和 bootstrap.yml 结合会得到配置文件/资源的地址参考文档: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html 注意在 Nacos Server 的配置文件的后缀是 .yaml , 而不是 .yml在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目 的正常启动, 也就是说如果项目不能正确的获取到 Nacos Server 的配置数据,项目是启动 不了的springboot 中配置文件的加载是存在优先级顺序的,bootstrap.yml 优先级高于 application.yml@RefreshScope 是 springcloud 原生注解,实现配置信息自动刷新, 如果在 Nacos Server 修改了配置数据,Client 端就会得到最新配置

6.Nacos 分类配置 (实现配置隔离)

1.DataID 方案

1.需求分析/图解

Nacos作为配置中心如何实现配置隔离呢? 比如:开发环境、测试环境、生产环境的配置隔离,利用Nacos如何实现呢?

2.解决方案分析

1.使用 Data ID 方案解决

2.Data ID 组成${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}==》服务名-配置文件actice-文件扩展名

3.配置实现

在 nacos server 创建新的配置:e-commerce-nacos-config-client-test.yaml

4.修改 application.yml

spring:profiles:#指定环境,场景的环境dev/test/prodactive: test

5.测试

2.Group 方案

1.需求分析/图解

– 示意图

2.解决方案分析

1.使用 Group 方案解决

3.配置实现

在 nacos server 创建新的配置:order/e-commerce-nacos-config-client-dev.yaml

在 nacos server 创建新的配置:seckill/e-commerce-nacos-config-client-dev.yaml

3.修改 application.yml

spring:profiles:#指定环境,场景的环境dev/test/prodactive: dev

5.修改 bootstrap.yml

#增加group参数

server:port: 5000spring:application:#这里的name需要参考nacos 配置中心的Data Idname: e-commerce-nacos-config-clientcloud:#配置nacosnacos:discovery:#服务注册中心地址server-addr: localhost:8848config:#配置中心地址,注意实际开发中配置中心的地址和注册中心的地址可能是分离的server-addr: localhost:8848#指定yaml格式的配置file-extension: yamlgroup: order

5.测试

3.Namespace 方案

1.需求分析/图解

– 示意图

2.解决方案分析

除了前面的DataID和Group隔离配置的方式,Nacos支持命名空间进行配置隔离。我们主要还是需要掌握这三种方式的使用以及各自的区别。而具体使用哪一种需要结合业务实际情况,进行使用。

3.配置实现

在 nacos server 创建新的 namespace , baidu 和 alibaba

在 nacos server 创建新的 group/dataid

3.修改 application.yml

spring:profiles:#指定环境,场景的环境dev/test/prodactive: dev

4.修改 bootstrap.yml

server:port: 5000spring:application:#这里的name需要参考nacos 配置中心的Data Idname: e-commerce-nacos-config-clientcloud:#配置nacosnacos:discovery:#服务注册中心地址server-addr: localhost:8848config:#配置中心地址,注意实际开发中配置中心的地址和注册中心的地址可能是分离的server-addr: localhost:8848#指定yaml格式的配置file-extension: yamlgroup: searchnamespace: a8e51ab6-bd7c-4544-9c42-6891804b4b8b

5.测试

4.Namespace/Group/Data ID 关系

1.图解

2.详解介绍

说明

(1)Nacos默认的命名空间是public,Namespace主要用来实现配置隔离, 隔离范围大

(2)Group默认是DEFAULT GROUP,Group可以把不同的微服务划分到同一个分组里面去

(3)Service就是微服务, 相同的Service可以是一个Cluster(簇/集群), Instance 就是微服务 的实例

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
扩展阅读