这篇文章聊聊微服务里的这几个老伙计:Eureka、Nacos、LoadBalance、OpenFeign。

咱们做微服务开发,总会跟这几个组件打交道:Eureka、Nacos、Spring Cloud LoadBalancer、OpenFeign。它们各司其职又互相配合,今天就把它们的关系、用法捋清楚,再上点代码示例,保证看完就明白。​不然很久不用就忘了。

先从注册中心说起,这俩货是服务的 "通讯录"​

不管是 Eureka 还是 Nacos,核心作用都一样:让各个微服务能互相找到对方。服务启动时会把自己的地址报到注册中心,调用的时候再从注册中心查对方的地址。但用法上差别不小。​

Eureka 得自己搭服务器,咱们用 Eureka 的话,得单独起一个 Eureka Server 服务。步骤大概是这样:​

  1. 加依赖,server 端用 spring-cloud-starter-netflix-eureka-server,client 端用 spring-cloud-starter-netflix-eureka-client。​
  2. 启动类上得加 @EnableEurekaServer(服务器端),client 端不用加特殊注解但得配置。​
  3. 配置文件里,server 要指定自己的地址,client 要指定 server 的地址。​

举个例子,Eureka Server 的配置:​

# application.yml
server:port: 8761
eureka:client:register-with-eureka: false  # 自己不注册自己fetch-registry: false        # 不用拉取服务列表serviceUrl:defaultZone: http://localhost:8761/eureka/

启动类:​

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApp {public static void main(String[] args) {SpringApplication.run(EurekaServerApp.class, args);}
}

客户端的配置就简单点,加个依赖,然后配置文件里指定 server 地址:​

spring:application:name: user-service  # 服务名很重要,后面调用要用
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/

而 Nacos 就省事儿多了,它本身是个现成的服务器,咱们不用自己搭。直接用人家提供的 Nacos Server(可以下载安装包启动),咱们的服务作为 client 连上去就行。​

用法上:​

  1. 只需要加一个依赖:spring-cloud-starter-alibaba-nacos-discovery。​
  1. 配置文件里指定 Nacos Server 的地址,不用管服务器端的事儿。​

代码示例:​

# application.yml
spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848  # Nacos Server的地址

启动类不用加特殊注解,直接启动就行,服务会自动注册到 Nacos。​

所以 Nacos 比 Eureka 省事儿,不用自己维护注册中心服务器,这是最大的区别。​

再看服务调用,RestTemplate 加 LoadBalance 是基础操作​

微服务之间调用,本质上就是发 HTTP 请求。RestTemplate 是 Spring 提供的工具,能帮咱们发请求。但直接用 RestTemplate 的话,得知道对方的 IP 和端口,这显然不现实 —— 服务可能多实例部署,IP 端口会变。​

这时候就需要 Spring Cloud LoadBalancer 了,它能做两件事:从注册中心拿到服务的所有实例地址,然后根据策略(比如轮询、随机)选一个出来,也就是负载均衡。​

咱们用 RestTemplate+LoadBalance 的组合,就能直接用服务名调用,不用管具体 IP 了。​

步骤如下:​

  1. 加依赖,spring-cloud-starter-loadbalancer(Nacos 的依赖里可能已经包含,保险起见还是加上)。​
  2. 配置 RestTemplate 的时候,加个 @LoadBalanced 注解,告诉它要用负载均衡。​

代码示例:​

@Configuration
public class RestTemplateConfig {@Bean@LoadBalanced  // 关键,加上这个才能用服务名调用public RestTemplate restTemplate() {return new RestTemplate();}
}

调用的时候,直接用服务名代替 IP: 端口:​

@Service
public class OrderService {@Autowiredprivate RestTemplate restTemplate;public User getUser(Long userId) {// 直接写 "http://服务名/接口路径",这里的user-service就是注册的服务名return restTemplate.getForObject("http://user-service/user/" + userId, User.class);}
}

LoadBalance 默认是轮询策略,就是挨个调用服务实例。想改随机的话,写个配置类就行:​

@Configuration
public class LoadBalancerConfig {@Beanpublic ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}

要是想搞更自定义的策略,比如按服务实例的负载情况分配,有两种办法:要么自己实现 ReactorLoadBalancer 接口,要么给 RestTemplate 加个拦截器,在拦截器里写选择逻辑,甚至直接在业务代码里查服务列表再手动选。不过一般默认的或者简单自定义就够了。​

再说说 OpenFeign,这货是 RestTemplate 的 "升级版"​

用 RestTemplate 调用虽然比写死 IP 强,但还是得拼接 URL、处理响应,不够优雅。OpenFeign 就方便多了,它是声明式的调用工具,自带了 LoadBalance,不用额外配置,写起来像调本地接口一样。​

用法步骤:​

  1. 加依赖,spring-cloud-starter-openfeign。​
  2. 启动类上得加 @EnableFeignClients,告诉程序要扫描 Feign 接口。​
  3. 写个接口,用 @FeignClient ("服务名") 标注,里面定义要调用的接口方法,路径、参数跟服务端的接口对应上。​
  4. 直接注入这个接口,像用本地方法一样调用。​

代码示例:​

先写 Feign 接口:​

// 声明要调用的服务名是user-service
@FeignClient(value = "user-service")
public interface UserFeignClient {// 这里的路径、参数要跟user-service里的接口完全一致@GetMapping("/user/{userId}")User getUser(@PathVariable("userId") Long userId);
}

启动类加注解:​

@SpringBootApplication
@EnableFeignClients  // 关键,开启Feign
public class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class, args);}
}

调用的时候直接用:​

@Service
public class OrderService {@Autowiredprivate UserFeignClient userFeignClient;  // 注入Feign接口public User getUser(Long userId) {// 像调本地方法一样,直接调用接口的方法return userFeignClient.getUser(userId);}
}

是不是比 RestTemplate 清爽多了?而且它自带负载均衡,不用再操心 @LoadBalanced 的事儿,内部已经集成了。​

最后总结下它们的联系和区别​

联系很简单:注册中心是基础,没有它服务之间找不到对方;LoadBalance 是 "调度员",负责把请求合理分配给多个服务实例;RestTemplate 和 OpenFeign 是 "信使",负责发请求,其中 OpenFeign 封装了 RestTemplate 和 LoadBalance,用起来更方便。​

区别主要在这几点:​

  1. 注册中心:Eureka 需要自己搭服务器,Nacos 直接用现成的,配置更简单;Nacos 除了注册中心还有配置中心功能,Eureka 只做注册发现。​
  2. 负载均衡:LoadBalance 是单独的负载均衡工具,RestTemplate 必须配合它才能用服务名调用;OpenFeign 自带 LoadBalance,不用额外配置。​
  3. 服务调用:RestTemplate 是基础工具,需要手动写调用代码;OpenFeign 是声明式的,更简洁,适合复杂场景。​

咱们实际开发中,现在用 Nacos+OpenFeign 的组合比较多,Nacos 省事,OpenFeign 写起来方便。当然 RestTemplate 也得会,简单场景下用着也挺快。​

大概就是这些了,这几个组件配合起来,就能让微服务之间的调用既灵活又可靠。代码示例都给了,照着试一遍,肯定能掌握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88085.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88085.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88085.shtml

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

相关文章

JavaSE-继承

继承&#xff08;inheritance&#xff09;继承的意义我们首先来看下面两个类&#xff1a;public class Dog {public String name;public int age;public void eat(){System.out.println(this.name"正在吃饭");}public void bark(){System.out.println(this.name"…

第二届虚拟现实、图像和信号处理国际学术会议(VRISP 2025)

重要信息 官网&#xff1a;www.icvisp.net 时间&#xff1a;2025年8月1-3日 地点&#xff1a;中国-长沙 简介 近年来&#xff0c;虚拟现实技术取得了显著进步&#xff0c;与5G、云计算和物联网等新一代信息技术的融合加速&#xff0c;推动了其在硬件、软件和内容应用等方面…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:整体布局、架构调整(二)

目录 一、前言 二、后端调整 1.实体类调整 2.菜单相关接口 3.用户相关接口 4.新增工具类 5.新增菜单树返回类 6.配置类、拦截器 三、前端调整 1.请求调整 2.页面布局、样式调整 1.user.vue 2.index.vue 3.请求拦截 四、开发过程中的问题 五、附&#xff1a…

vue3官方文档学习心得

这几天抽空把vue3的文档整个看了一遍。简介 | Vue.js 23年写过一个vue2的项目&#xff0c;24年写了一个vue3的项目&#xff0c;页面功能比较简单&#xff0c;用几个简单的API&#xff0c;watch、watchEffect、ref、reactive就能实现的业务功能。 写了几年的react的&#xff0…

Pycharm恢复默认设置,配置导致复制粘贴等不能使用

在file 种找到manage IDE settings在manage IDE settings中找到restore default settings

【王树森推荐系统】召回12:曝光过滤 Bloom Filter

概述 曝光过滤通常是在召回阶段做&#xff0c;具体的方法就是用 Bloom Filter 曝光过滤问题 如果用户看过某个物品&#xff0c;则不再把该物品曝光给用户。原因是同一个物品重复曝光给用户会损害用户体验&#xff0c;但也不是所有推荐系统都有曝光过滤&#xff0c;像 youtube 这…

基于STM32单片机的心率血氧监测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)

系列文章目录 文章目录 系列文章目录前言1 资料获取与演示视频1.1 资料介绍1.2 资料获取1.3 演示视频 2 系统框架3 硬件3.1 主控制器3.2 显示屏3.3 WIFI模块3.4心率血氧传感器 4 设计PCB4.1 安装下载立创EDA专业版4.2 画原理图4.4 使用嘉立创下单助手进行下单&#xff0c;打板。…

main(int argc,char **agrv)的含义

今天和大家讨论一个常见的但是不容易深入了解的知识点。那就是 main 函数声明中使用到的 argc 和 argv 的含义。通常我们写主函数的时候一般都是直接使用int main() 或者 void main() 来声明 main 函数。但是你知道吗&#xff1f;在c89/c99的语言标准中&#xff0c;main函数的声…

如何简单实现发版不影响客户使用?nginx负载

nginx负载发版不影响客户使用 1.需要二台服务器 2.二台服务器均是正式环境配置 3.服务器Nginx配置修改 发版顺序&#xff1a;先在服务器2发版&#xff0c;发布成功后&#xff0c;再改服务器Nginx配置&#xff0c;重新加载nginx&#xff1b;然后在服务器再发版&#xff0c;发布成…

qt笔记(1)——Qtablewidget使用

1.基础使用方法 &#xff08;略&#xff09; 2.坑和注意点 2.1 设置一个单元格的编辑属性 在代码中&#xff0c;想要修改一个单元格的编辑属性&#xff0c;需要对这个item的flags进行设置&#xff1b;注意对一个tablewidget的一个item成员进行设置后&#xff0c;进行一次编…

字符串的模糊匹配方法介绍

字符串的模糊匹配方法介绍 目录字符串的模糊匹配方法介绍一、编辑距离&#xff08;Levenshtein Distance&#xff09;复杂度分析二、Jaro-Winkler 距离复杂度分析三、最长公共子序列&#xff08;LCS&#xff09;复杂度分析四、模糊搜索&#xff08;Fuzzy Search&#xff09;复杂…

ActiveMQ在Spring Boot中的详细使用指南

📋 目录 🚀 ActiveMQ简介 什么是ActiveMQ? 核心概念 🏗️ 基础架构组件 📝 重要概念解释 ActiveMQ vs 其他消息中间件 🔧 环境搭建 1. ActiveMQ服务端安装 Docker方式(推荐初学者) 手动安装方式 2. 验证安装 访问Web管理界面 连接参数 测试连接 �…

二元一次方程

前言 最近刚学二元一次方程&#xff0c;想写一篇专栏熟悉一下本文写给初一的同学看&#xff0c;学过的就划了吧二元一次方程 两个未知数最高项次数为 111 次为整式方程二元一次方程的解不唯一&#xff0c;但是二元一次方程可以用一个未知数来表达另一个未知数eg:eg:eg: xy1x y…

AI编程的未来是智能体原生开发?

目录 前言 一、从“串行”到“并行”&#xff1a;什么是智能体原生开发&#xff1f; 1.1 传统模式&#xff08;串行思维&#xff09; 1.2 智能体原生模式&#xff08;并行思维&#xff09; 二、程序员的新角色&#xff1a;从代码手艺人到系统思想家 三、软件开发的终局&a…

【牛客刷题】小红的与运算

文章目录 一、题目介绍1.1 题目描述1.2 输入描述1.3 输出描述1.4 示例二、 解题思路2.1 核心算法设计2.2 性能优化关键2.3 算法流程图三、解法实现3.1 解法一:基础实现3.1.1 初级版本分析3.2 解法二:优化版本(推荐)3.2.1 优化版本分析四、总结与拓展4.1 关键优化技术4.2 算…

spring中 方法上@Transation实现原理

Spring中Transactional注解方法实现原理Spring的Transactional注解在方法级别实现事务管理的原理主要基于动态代理和拦截器机制&#xff0c;以下是其核心实现流程&#xff1a;1. 代理创建阶段当Spring容器启动时&#xff0c;会为带有Transactional注解的类创建代理对象&#xf…

qt-C++语法笔记之Stretch与Spacer的关系分析

qt-C语法笔记之Stretch与Spacer的关系分析 code review! 文章目录qt-C语法笔记之Stretch与Spacer的关系分析1. Stretch&#xff08;拉伸因子&#xff09;2. Horizontal Spacer 和 Vertical Spacer3. Stretch 和 Spacer 的关系4. 实际应用中的选择5. 注意事项6. 代码与 Qt Desig…

Qwen3技术综述

1. 引入 2025年5月&#xff0c;qwen推出了旗舰模型&#xff08;flagship model&#xff09;Qwen3-235B-A22B。并以Apache 2.0版权发布&#xff08;可自由商业使用&#xff0c;修改代码和商用要包含原始版权&#xff09;。本文对其技术报告中提到的数据处理技术与模型结构进行综…

[特殊字符] Excel 读取收件人 + Outlook 批量发送带附件邮件 —— Python 自动化实战

许多公司定期需要将不同部门或客户的报告发送给指定人员。手动操作容易出错、耗时且繁琐。今天这篇文章教你如何利用 Python 实现&#xff1a; &#x1f9e9; 从 Excel 中读取“收件人 抄送人 附件文件路径”&#xff1b; &#x1f4e4; 使用 win32com.client 调用 Outlook …

多模态大语言模型arxiv论文略读(152)

VidComposition: Can MLLMs Analyze Compositions in Compiled Videos? ➡️ 论文标题&#xff1a;VidComposition: Can MLLMs Analyze Compositions in Compiled Videos? ➡️ 论文作者&#xff1a;Yunlong Tang, Junjia Guo, Hang Hua, Susan Liang, Mingqian Feng, Xinya…