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.pswp.cn/pingmian/86811.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86811.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86811.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+Spring Boot的校园闲置物品交易系统

源码编号&#xff1a;S561 源码名称&#xff1a;基于Spring Boot的校园闲置物品交易系统 用户类型&#xff1a;多角色&#xff0c;用户、商家、管理员 数据库表数量&#xff1a;12 张表 主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 运行环境&#xff1…

SpringBoot 的 jar 包为什么可以直接运行?

一、普通jar包和SpringBoot jar包有什么区别&#xff1f;什么是jar包&#xff1f;&#xff1f; &#xff08;1&#xff09;什么是Jar包&#xff1f; 定义&#xff1a; JAR 包&#xff08;Java Archive&#xff09; 是 Java 平台标准的归档文件格式&#xff0c;用于将多个 Jav…

算法-基础算法-递归算法(Python)

文章目录 前言递归和数学归纳法递归三步走递归的注意点避免栈溢出避免重复运算 题目斐波那契数反转链表 前言 递归&#xff08;Recursion&#xff09;&#xff1a;指的是一种通过重复将原问题分解为同类的子问题而解决的方法。在绝大数编程语言中&#xff0c;可以通过在函数中再…

TVFEMD-CPO-TCN-BiLSTM多输入单输出模型

47-TVFEMD-CPO-TCN-BiLSTM多输入单输出模型 适合单变量&#xff0c;多变量时间序列预测模型&#xff08;可改进&#xff0c;加入各种优化算法&#xff09; 时变滤波的经验模态分解TVFEMD时域卷积TCN双向长短期记忆网络BiLSTM时间序列预测模型 另外以及有 TCN-BILSTM …

深入浅出Node.js中间件机制

我们用一个实际的例子来看看中间件是如何运作的。假设我们有一个非常简单的Express应用&#xff0c;它只有两个中间件函数&#xff1a; const express require(express); const app express();app.use((req, res, next) > {console.log(第一个中间件);next(); });app.use…

Vue-15-前端框架Vue之应用基础编程式路由导航

文章目录 1 RouterLink的replace属性1.1 App.vue1.2 应用效果2 编程式路由导航2.1 场景一Home.vue2.2 场景二News.vue3 路由重定向3.1 index.ts3.2 Detail.vue3.3 About.vue1 RouterLink的replace属性 路由每次跳转都有记录,默认是push,可以改为replace。 RouterLink支持两…

android14 设置下连续点击5次Settings标题跳转到拨号界面

部分项目隐藏了拨号器&#xff0c;但开发者需要间距跳转到拨号界面 设置一级界面&#xff1a; packages/apps/Settings/src/com/android/settings/homepage/SettingsHomepageActivity.java 通过dispatchTouchEvent方法先获取Settings标题的区域X,Y数据。 import java.util.Set…

MP分页和连表常用写法

1. 分页查询 方案一&#xff1a;MyBatis XML MyBatis 内置的使用方式&#xff0c;步骤如下&#xff1a; ① 创建 AdminUserMapper.xml 文件&#xff0c;编写两个 SQL 查询语句&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE m…

使用 Spring AI Alibaba构建 AI Code Review 应用

很早的时候就想着用AI来做Code Review&#xff0c;最近也看到了一些不错的实现&#xff0c;但是没有一个使用Java来构建的&#xff0c;看的比较费劲&#xff0c;虽然说语言只是一种工具&#xff0c;但是还是想用Java重新写一遍&#xff0c;正好最近Spring AI Alibaba出了正式版…

力扣1590. 使数组和能被 P 整除

这一题的难点在于模运算&#xff0c;对模运算足够了解&#xff0c;对式子进行变换就很容易得到结果&#xff0c;本质上还是一道前缀和哈希表的题 这里重点讲一下模运算。 常见的模运算的用法 (a-b)%k0等价于 a%kb%k 而在这一题中由于多了一个len&#xff0c;&#xff08;数组的…

FPGA内部资源介绍

FPGA内部资源介绍 目录 逻辑资源块LUT&#xff08;查找表&#xff09;加法器寄存器MUX&#xff08;复用器&#xff09;时钟网络资源 全局时钟网络资源区域时钟网络资源IO时钟网络资源 时钟处理单元BLOCK RAMDSP布线资源接口资源 用户IO资源专用高速接口资源 总结 1. 逻辑资源…

CSS 列表

CSS 列表 引言 CSS 列表是网页设计中常用的一种布局方式&#xff0c;它能够帮助我们以更灵活、更美观的方式展示数据。本文将详细介绍 CSS 列表的创建、样式设置以及常用技巧&#xff0c;帮助您更好地掌握这一重要技能。 CSS 列表概述 CSS 列表主要包括两种类型&#xff1a…

spring中的@Cacheable缓存

1. 使用方法 在方法上面加上注解Cacheable&#xff0c; OverrideCacheable(cacheNames "userCache", key "#id")public User getUserById(Long id) {System.out.println("查询数据库了");return getById(id);}如果你的项目中引入了&#xff…

Node.js特训专栏-实战进阶:9.MySQL连接池配置与优化

🔥 欢迎来到 Node.js 实战专栏!在这里,每一行代码都是解锁高性能应用的钥匙,让我们一起开启 Node.js 的奇妙开发之旅! Node.js 特训专栏主页 专栏内容规划详情 MySQL连接池配置与优化:提升数据库交互性能的关键 一、MySQL连接池基础概念 1.1 什么是连接池? 连接池是…

【innovus基础】- 如何手动画线?

后端实现的过程就是将逻辑连线变为物理的金属连线的过程。 1、打开Pin shape的Visible 和 Selected开关&#xff0c;使其可见并可选 2、选中想要画线的IOCell 3、鼠标选中对应的pin 4、使用dbGet 获取此pin脚逻辑连线net的名字&#xff1b; dbGet selected.net.name 5、使用画…

element-plus限制日期可选范围(这里以7天为例)

element-plus日期范围限制功能实现逻辑 1. 需求&#xff1a;通过限制时间的可选范围减少请求的数据量 2. 实现效果&#xff1a; 日期选择器做限制 3. 代码逻辑&#xff1a; 思路&#xff1a;通过calendar-change获取开始日期&#xff0c;然后通过disabled-date禁用不满足条件…

机器学习2-梯度下降与反向传播

损失函数 与 平均方差函数 傻傻分不清 损失函数是概念&#xff1b;平均方差函数是具体的实现 损失函数&#xff08;如均方误差 MSE&#xff09;用于衡量模型预测值与真实值之间的差距。损失越小&#xff0c;说明模型对当前数据的拟合越好。 但模型并非拟合度越高越好&#xf…

安全生产风险管控平台:企业安全管理的智能化解决方案

在工业生产、建筑施工、能源化工等领域&#xff0c;安全生产是企业可持续发展的基石。然而&#xff0c;传统安全管理模式依赖人工巡检、纸质记录和事后处理&#xff0c;难以满足现代化企业的高效风险管控需求。安全生产风险管控平台应运而生&#xff0c;它利用物联网、大数据、…

如何保证数据库与 Redis 缓存的一致性?

在现代互联网应用中&#xff0c;Redis 缓存几乎是性能优化的标配。但在使用过程中&#xff0c;一个绕不过去的问题就是&#xff1a; 如何保证 Redis 缓存与数据库之间的数据一致性&#xff1f; 特别是在高并发场景下&#xff0c;读写操作错位可能导致缓存中出现脏数据&#xff…

现代 JavaScript (ES6+) 入门到实战(三):字符串与对象的魔法升级—模板字符串/结构赋值/展开运算符

在前两篇&#xff0c;我们升级了变量和函数。今天&#xff0c;我们要给 JavaScript 中最常用的两种数据类型——字符串&#xff08;String&#xff09;和对象&#xff08;Object&#xff09;——装备上 ES6 带来的强大魔法。 准备好告别丑陋的 号拼接和重复的对象属性赋值了吗…