当前位置: 首页 > 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.lqws.cn/news/533215.html

相关文章:

  • 01【C++ 入门基础】命名空间/域
  • vue 开启 source-map 后构建速度会很慢
  • LaTeX之中文支持和设置字体的几种方法
  • Docker 入门教程(一):从概念到第一个容器
  • php的案例分析----typecho项目
  • 华为云Flexus+DeepSeek征文|华为云ModelArts搭建Dify-LLM应用开发平台(AI智能选股大模型)
  • 制药行业的精细化管理:GCOM80-2NET自动化解决方案
  • 用pthread_setschedparam设置调度策略
  • Altera PCI IP target设计分享
  • STM32F103ZET6开发板【项目工程创建】+具体实现步骤流程
  • 构建高效字符串编解码系统:Prefix-Token-Suffix三元组方法
  • python pyecharts 数据分析及可视化
  • 创客匠人解析视频号公私域互通逻辑:知识变现的破圈与沉淀之道
  • [特殊字符]推客带货小程序解决方案——0门槛裂变营销,佣金赚不停!
  • 408考研逐题详解:2010年第7题——连通图的边
  • 代码随想录|图论|06岛屿数量(广搜BFS)
  • PhoneRescue 4.3绿色版!解决iPhone数据丢失、系统崩溃等场景
  • 单片机 - STM32F103“复用功能重映射”完整解析:从JTAG释放到TIM重映射实战详解
  • CTF:PHP 多关卡绕过挑战
  • 专注推理查询(ARQs):一种提升大型语言模型指令遵循度、决策准确性和防止幻觉的结构化方法
  • 【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿
  • ISP Pipeline(5): Auto White Balance Gain Control (AWB) 自动白平衡
  • 数据结构大项目
  • react - ReactRouter—— 路由传参
  • 【STM32 学习笔记】PWR电源控制
  • Java 大视界 -- 基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(324)
  • 【linux】全志Tina配置swupdate工具进行分区打包
  • 《PT100两线制温度测量系统设计:从电路原理到嵌入式实现》
  • 【嵌入式ARM汇编基础】-ELF文件格式内部结构详解(二)
  • 香港政府发表《香港数字资产发展政策宣言 2.0》,提出「LEAP」框架