springcloud nacos的赋值均衡和动态刷新
作者:健康平安的活着
一 nacos
1.1 nacos作用介绍
nacos是一个分布式的配置中心和注册发现中心。
nacos是 dynamic naming configuration service
nacos=config+bus 实现动态刷新;nacos=consul
1.2 各个注册中心对比
注册中心 | CAP模型 | 控制台管理 | 社区活跃度 |
Eureaka | Ap | 支持 | 低 |
zk | cp | 不支持 | 中 |
consul | cp | 支持 | 高 |
nacos | AP,和cp | 支持 | 高 |
二 Nacos的安装
2.1 nacos的安装搭建
1.本次安装版本为2.2.3,下载软件包,进行解压启动,输入命令
E:\nacos-server2.2.3\bin>startup.cmd -m standalone
2.截图
3.访问地址
三 服务端的注册到Nacos
3.1 流程说明以及注意事项
1.客户端:ms-alibaba-provider8081
2.服务端:ms-alibaba-provider9091
3.注意事项:请求服务端的地址 不能只写 服务名称:ms-alibaba-provider9091,否则请求不成功
需要改成如下:http://ms-alibaba-provider9091
3.2 客户端配置
1.pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.jurf.ms</groupId> <artifactId>mscloud-demo-2024</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>com.jurf.ms.alibaba.consumer8081</groupId> <artifactId>ms-alibaba-consumer-8081</artifactId> <packaging>jar</packaging> <name>ms-alibaba-consumer-8081</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- 引入自己定义的api通用包 --> <!-- <dependency>--> <!-- <groupId>com.jurf.ms.api</groupId>--> <!-- <artifactId>ms-api-commons</artifactId>--> <!-- <version>1.0-SNAPSHOT</version>--> <!-- </dependency>--> <!--openfeign--> <!-- <dependency>--> <!-- <groupId>org.springframework.cloud</groupId>--> <!-- <artifactId>spring-cloud-starter-openfeign</artifactId>--> <!-- </dependency>--> <!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--loadbalancer--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <!--web + actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- <dependency>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-starter-actuator</artifactId>--> <!-- </dependency>--> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </project>
2.application配置
server: port: 8081 spring: application: name: ms-alibaba-consumer-8081 cloud: nacos: discovery: server-addr: localhost:8848 #消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么) service-url: nacos-user-service: http://ms-alibaba-provider9091
3.业务
a)controller
package com.jurf.ms.alibaba.consumer8081.controller; import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * @auther zzyy * @create 2024-01-01 15:43 */ @RestController public class OrderNacosController { @Resource private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value = "/consumer/pay/nacos/{id}") public String paymentInfo(@PathVariable("id") Integer id) { System.out.println("进来了要。。。。。"); // String serverUrl="http://localhost:9091"; String result = restTemplate.getForObject(serverURL + "/pay/nacos/"+id, String.class); return result+"\t"+" 我是OrderNacosController83调用者。。。。。。"; // return "\t"+" 我是OrderNacosController83调用者。。。。。。"; } }
b)config
package com.jurf.ms.alibaba.consumer8081.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; /** * @auther zzyy * @create 2024-01-01 15:42 */ @Configuration public class RestTemplateConfig { @Bean @LoadBalanced //赋予RestTemplate负载均衡的能力 public RestTemplate restTemplate() { return new RestTemplate(); } }
4.启动类
package com.jurf.ms.alibaba.consumer8081; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * Hello world! * */ @EnableDiscoveryClient @SpringBootApplication public class App8081 { public static void main( String[] args ) { SpringApplication.run(App8081.class,args); System.out.println( "Hello World!" ); } }
3.3 服务端
1.pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.jurf.ms</groupId> <artifactId>mscloud-demo-2024</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>com.jurf.ms.alibaba.provider9091</groupId> <artifactId>ms-alibaba-provider-9091</artifactId> <packaging>jar</packaging> <name>ms-alibaba-provider-9091</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--web + actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> </project>
2.application配置
server: port: 9091 spring: application: name: ms-alibaba-provider9091 cloud: nacos: discovery: server-addr: localhost:8848
3.业务
package com.jurf.ms.alibaba.provider9091.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; /** * @auther zzyy * @create 2024-01-01 15:31 */ @RestController public class PayAlibabaController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/pay/nacos/{id}") public String getPayInfo(@PathVariable("id") Integer id) { return "nacos registry, serverPort: "+ serverPort+"\t id"+id; } }
4.启动类
package com.jurf.ms.alibaba.provider9091; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * Hello world! * */ @EnableDiscoveryClient @SpringBootApplication public class Nacos9091App { public static void main( String[] args ) { SpringApplication.run(Nacos9091App.class,args); System.out.println( "Hello World!" ); } }
3.4 调试
1启动服务
2.调试:http://localhost:8081/consumer/pay/nacos/456
四 nacos模拟负载均衡
4.1 模拟操作
1.在服务9091的基础上,复制一份服务
2.进行配置:配置端口为:9092,在vm parmater参数项配置如下:-DServer.port=9092
3.进行启动
1.查看nacos
2.查看
3.动态不停刷新访问
提供服务为9091
提供服务为9092
五 nacos的动态刷新
5.1 动态刷新配置逻辑
1.配置规则:
2.配置对应关系
5.2 配置操作
5.2.1 pom配置文件
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
5.2.2 修改bootstrap和application配置文件
1.bootstrap配置文件
# nacos配置 spring: application: name: ms-alibaba-consumer-8081 cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 # group: DEFAULT_GROUP # namespace: c364e76c-e133-4bc0-951e-205cf732a19f # nacos端配置文件DataId的命名规则是: # ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 本案例的DataID是:nacos-config-client-dev.yaml nacos-config-client-test.yaml
2.application配置文件
server: port: 8081 app: appid: 94933 spring: profiles: #active: dev # 表示开发环境 active: prod # 表示生产环境 #active: test # 表示测试环境 #消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么) service-url: nacos-user-service: http://ms-alibaba-provider9091
5.2.3 在nacos进行文件配置
1.新建namespace
2.新建文件:注意配置文件后族为yaml,不能写成yml,否则无法识别
5.2.4 验证
1.启动服务
2.验证:http://localhost:8081/consumer/pay/nacos/456
3.修改配置文件
4.再次查看
到此这篇关于springcloud nacos的赋值均衡和动态刷新的文章就介绍到这了,更多相关springcloud nacos赋值均衡和动态刷新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Alibaba SpringCloud集成Nacos、openFeign实现负载均衡的解决方案
- SpringCloud使用Nacos保存和读取变量的配置方法
- SpringBoot项目改为SpringCloud项目使用nacos作为注册中心的方法
- 关于springcloud集成nacos遇到的问题
- SpringCloud2020整合Nacos-Bootstrap配置不生效的解决
- SpringCloud整合Nacos实现流程详解
- SpringCloud-Alibaba-Nacos启动失败解决方案
- Springcloud seata nacos环境搭建过程图解
- Springcloud-nacos实现配置和注册中心的方法