当前位置: 首页 > 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);}
http://www.lryc.cn/news/575751.html

相关文章:

  • LightGBM:极速梯度提升机——结构化数据建模的终极武器
  • 2.1、STM32 CAN外设简介
  • 鸿蒙实时音视频流处理框架开发实战——基于HarmonyOS 4.0与分布式软总线的低延时高可靠架构
  • Miniconda+Jupyter+PyCharm初始环境配置
  • Java全栈面试实录:从电商平台到AIGC,技术栈深度解析
  • Linux驱动学习day8(按键驱动读取方式、GPIO、pinctrl子系统)
  • FFmpeg进行简单的视频编辑与代码写法实例
  • 推荐系统的视频特征-视频关键帧特征提取与向量生成
  • 【Unity】如何制作翻页UI
  • 圆周期性显示和消失——瞬态实现(CAD c#二次开发、插件定制)
  • 算法打卡 day4
  • Vue样式绑定与条件渲染详
  • MySQL多表关系
  • ASIO 避坑指南:高效、安全与稳健的异步网络编程
  • 游戏App前端安全加固:利用AI云防护技术抵御恶意攻击
  • vue3 json 转 实体
  • 临床开发计划:从实验室到市场的战略蓝图
  • day48-硬件学习之GPT定时器、UART及I2C
  • 面试150 判断子序列
  • 【已解决】Android Studio gradle遇到unresolved reference错误
  • 鸿蒙 SplitLayout 组件解析:折叠屏分割布局与多端适配指南
  • 视频关键帧提取
  • 跟着AI学习C#之项目实战-电商平台 Day1
  • Python打卡:Day36
  • mac电脑安装vscode的力扣插件报错解决办法
  • 板凳-------Mysql cookbook学习 (十--11)
  • Spring Boot高并发 锁的使用方法
  • Flutter 多平台项目开发指南
  • 使用java语言,计算202503291434距离当前时间,是否大于三天
  • SQL SERVER存储过程