尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Spring Cloud + Nacos 使用

Spring Cloud + Nacos 使用 文章目录Spring Cloud Nacos 使用一、依赖版本二、微服务跨主机调用2.1 配置 RestTemplate2.2 跨机器调用2.3 缺点三、Nacos 作为注册中心3.1 什么是注册中心3.2 首次下载需要配置3.3 Nacos 操控代码3.3.1 引入依赖(双方)3.3.2 yml 配置(双方)3.3.3 服务端注册3.3.4 客户端注册3.3.5 客户端调用3.3.6 进入控制台四、负载均衡与权重4.1 引入依赖4.2 yml4.3 代码五、同集群优先访问5.1 yml5.2 效果六、临时与非临时实例6.1 yml6.2 注意七、环境隔离7.1 在 Nacos 控制台创建命名空间7.2 yml九、演进总结Spring Cloud Nacos 使用一、依赖版本组件版本说明Java21Spring Boot4.1.0父 POM 统一管理Spring Cloud2025.1.2spring-cloud-dependenciesSpring Cloud Alibaba2025.1.0.0spring-cloud-alibaba-dependenciesMyBatis Spring Boot Starter4.1.0MySQL Connector/J8.0.33父 POM 版本锁定propertiesjava.version21/java.versionspring-cloud.version2025.1.2/spring-cloud.versionspring-cloud-alibaba.version2025.1.0.0/spring-cloud-alibaba.versionmybatis.version4.1.0/mybatis.versionmysql.version8.0.33/mysql.version/properties二、微服务跨主机调用RestTemplate 封装了 HTTP 请求Spring 会自动把返回的 JSON 反序列化成 Java 对象。2.1 配置 RestTemplateConfigurationpublicclassRestTemplateConfig{BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}2.2 跨机器调用product-service 部署在另一台机器IP 为X端口8081提供接口返回ProductDO的 JSON。order-service 远程调用Stringurlhttp://X:8081/product/getProductById?idid;ProductDOproductInforestTemplate.getForObject(url,ProductDO.class);2.3 缺点缺点说明URL 写死IP / 端口变更调用方代码或配置必须跟着改无法多实例product 扩容多个端口调用方要自己维护 IP:Port 列表无故障转移某台机器挂了调用方不会自动切换无负载均衡请求无法自动分散到多个实例三、Nacos 作为注册中心3.1 什么是注册中心类似于公告栏提供服务端可用的 IP 和端口号客户端通过服务名查找而不是写死 IP。解决了 URL 写死不易更改、服务端宕机 / 更换地址等问题。Nacos 下载网址https://nacos.io/3.2 首次下载需要配置进入\nacos\conf\application.propertiesnacos.server.main.port8848(修改端口号可选)nacos.ai.registry.port9948(Nacos提供网页版控制台,通过这个端口在浏览器进入控制台)nacos.core.auth.plugin.nacos.token.secret.key(添加一个Base6432字节的字符串)nacos.core.auth.server.identity.key(设置key任意字符串都可)nacos.core.auth.server.identity.value(设置value任意字符串都可)如果是 Windows 单机模拟进入\nacos\bin\startup.cmd约 26 行设置为单机然后双击startup.cmd启动set MODEstandalone如果是 Linux 环境解压缩 zip配置\nacos\conf\application.properties启动sh startup.sh -m standalone单机/sh startup.sh -m cluster集群3.3 Nacos 操控代码3.3.1 引入依赖(双方)dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency3.3.2 yml 配置(双方)spring:cloud:nacos:discovery:server-addr:127.0.0.1:8848#指向同一个 NacosNacos部署在哪里,就写哪个IP3.3.3 服务端注册在启动类加入EnableDiscoveryClientimportorg.springframework.cloud.client.discovery.EnableDiscoveryClient;SpringBootApplicationEnableDiscoveryClientpublicclassProductSpringBootApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProductSpringBootApplication.class,args);}}启动后Nacos 控制台可看到product-service实例。3.3.4 客户端注册启动类加入EnableDiscoveryClientimportorg.springframework.cloud.client.discovery.EnableDiscoveryClient;SpringBootApplicationEnableDiscoveryClientpublicclassOrderSpringBootApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderSpringBootApplication.class,args);}}3.3.5 客户端调用配置RestClientConfigurationpublicclassRestClientConfig{BeanRestClient.BuilderrestClientBuilder(){returnRestClient.builder();}}通过服务名调用服务名即 yml 中的spring.application.nameProductDOproductrestClientBuilder.build().get().uri(http://product-service/product/getProductById?idorder.getProductId()).retrieve().body(ProductDO.class);多个 product 实例提供相同服务时spring.application.name必须一致都是product-service。3.3.6 进入控制台浏览器访问 Nacos 控制台注意nacos.ai.registry.port默认8080才是控制台端口不是 8848。四、负载均衡与权重Nacos 负责「有哪些实例」选哪个实例由 Spring Cloud LoadBalancer 完成。4.1 引入依赖order-servicedependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency4.2 yml客户端配置spring:cloud:loadbalancer:nacos:enabled:true# 启用 Nacos 权重策略默认仅轮询在注册中心 服务管理-服务列表-详情-编辑配置各个服务端权重4.3 代码LoadBalanced注解实现负载均衡ConfigurationpublicclassRestClientConfig{LoadBalancedBeanRestClient.BuilderrestClientBuilder(){returnRestClient.builder();}}ProductDOproductrestClientBuilder.build().get().uri(http://product-service/product/getProductById?idproductId).retrieve().body(ProductDO.class);五、同集群优先访问即同机房优先访问优先调用同集群实例同集群故障再访问不同集群5.1 ymlorder-service调用方上海机房spring:cloud:nacos:discovery:cluster-name:shanghaiproduct-service 8081上海spring:cloud:nacos:discovery:cluster-name:shanghaiproduct-service 8082 / 8083北京spring:cloud:nacos:discovery:cluster-name:beijing5.2 效果六、临时与非临时实例类型ephemeral健康检查下线行为临时实例true默认提供服务的那方向Nacos发送心跳超时自动剔除非临时实例false互相发送心跳标记不健康不立即删除临时服务断联后注册中心直接剔除实例非临时注册中心主动向服务端发探测断联后先标记不健康再移除6.1 yml所有相同name服务端的临时与非临时都必须统一,默认为临时spring:cloud:nacos:discovery:ephemeral:false6.2 注意更改请进入\nacos\data\protocol删去raft文件夹,这个文件记录了之前是否为临时服务端七、环境隔离通过 Nacos命名空间namespace隔离 dev / prod 环境不同环境的服务互相不可见。dev的只能看见注册中心dev环境下可用的服务端.7.1 在 Nacos 控制台创建命名空间命名空间-新建命名空间7.2 ymlapplication-dev.ymlorder / product 均需spring:cloud:nacos:discovery:namespace:14976256-c71e-4138-b0b1-6aa2644ef289application-prod.ymlspring:cloud:nacos:discovery:namespace:9e9d7903-a714-4bd6-ba21-4daeb0a31fdcapplication.yml 激活 profilespring:profiles:active:dev九、演进总结
返回列表