当前位置: 首页 > news >正文

七天学会SpringCloud分布式微服务——03——Nacos远程调用

1、微服务项目配置类放在地方

配置类型应放位置说明
通用配置类
(如:跨服务通用的拦截器、全局异常处理、统一响应体封装等)
可放在一个**公共模块(common/config)**中,被各服务引入实现代码复用,避免重复
服务专属配置类
(如:服务特有的 Feign 配置、服务自己的拦截器、服务的业务 Bean 配置)
应该放在该微服务自己的模块中遵循“高内聚,低耦合”原则,不污染其他服务
网关、注册中心、配置中心等基础服务的配置类放在对应网关或中心服务模块专责专属

2、Nacos注册中心宕机了,远程调用还能使用吗

  • 如果调用过就可以,如果没有调用过就不可以

3、 远程调用的三种方式(以order微服务调用product为例)

3.1 首先就是要获取到service-product的微服务

  • 引入依赖
        <!-- Nacos服务发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
  • 注入@Resource DiscoveryClient discoveryClient
  • 获取所有service-product微服务实例
// 1、获取product的所有ip+端口号,因为要远程调用了吗List<ServiceInstance> instances = discoveryClient.getInstances("service-product");

3.2 如何发送调用呢

选择RestTemplate 或者 WebClient,这里使用前者

  • 编写配置类:
@Configuration
public class AppConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
  • 注入配置类 @Resource RestTemplate restTemplate
  • 使用
    	// 3、拼接远程URLString url = "http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/product/"+productId;// 4、给远程发请求return restTemplate.getForObject(url, Product.class);

3.3 负载均衡的远程调用

  • 引入依赖:
       <!--负载均衡依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>
  • 注入依赖 @Resource LoadBalancerClient loadBalancerClient;
  • 使用
 private Product getProductFromRemoteBalance(Long productId){// 1、chooseServiceInstance choose = loadBalancerClient.choose("service-product");// 2、拼接远程URLString url = "http://"+choose.getHost()+":"+choose.getPort()+"/product/"+productId;System.out.println(url);// 3、给远程发请求return restTemplate.getForObject(url, Product.class);}

3.4 负载均衡远程调用注解(推荐,不用获取服务了)

  • 在远程调用配置类中加入注解@LoadBalanced
@Configuration
public class ServiceConfig {/*远程调用自动负载均衡*/@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}
  • 使用
 private Product getProductFromRemoteWithAno(Long productId){// 1、拼接远程URLString url = "http://service-product/product/"+productId;System.out.println(url);// 2、给远程发请求return restTemplate.getForObject(url, Product.class);}

相关文章:

  • 随记:WebMvcConfigurationSupport 和WebMvcConfigurer 的区别
  • ldl-DeserializationViewer一款强大的序列化数据可视化工具
  • 仓颉语言开发初体验HashMap,变量定义、方法定义
  • 网络安全之SQL RCE漏洞
  • 【Excel数据分析】花垣县事业单位出成绩了,用Excel自带的M语言做一个数据分析
  • 深入剖析Nginx架构及其不同使用场景下的配置
  • Ubuntu下布署mediasoup-demo
  • 【LLM安全】MCP(模型上下文协议)及其关键漏洞、技术细节
  • VUE3入门很简单(2)--- 计算属性
  • 力扣网C语言编程题:搜索二维矩阵的普通解法与二分查找法
  • 面试150 文本左右对齐
  • 用Dockerfile点亮你的容器化世界:从零到精通
  • 基于定制开发开源AI智能名片S2B2C商城小程序源码的H5游戏开发模式创新研究
  • 【音视频】Ubuntu下配置ffmpeg库
  • 网络路由策略与过滤策略原理及实验脚本
  • 【零基础学AI】 第6讲:数据可视化基础
  • 【STM32】[特殊字符] WWDG(窗口看门狗)学习笔记
  • 【unitrix】 4.7 库数字取反(not.rs)
  • Vue 3 高级编程技巧
  • 《天行数据查询系统项目介绍》