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

Eureka 和 Feign(二)

Eureka 和 Feign 是 Spring Cloud 微服务架构中协同工作的两个核心组件,它们的关系可以通过以下比喻和详解来说明:


关系核心:服务发现 → 动态调用

组件角色核心功能
Eureka服务注册中心服务实例的"电话簿"
Feign声明式HTTP客户端根据"电话簿"智能拨号的"电话"

协同工作流程

1. 注册
2. 拉取注册表
3. 声明接口
4. 动态调用
服务提供者
Eureka Server
服务消费者
Feign Client
具体步骤:
  1. 服务注册(Eureka 核心功能)
    服务提供者(如用户服务)启动时向 Eureka 注册自己的地址:

    # 用户服务的配置
    eureka:client:service-url:defaultZone: http://eureka-server:8761/eureka
    
  2. 服务发现(Eureka 核心功能)
    服务消费者(如订单服务)从 Eureka 获取可用服务列表:

    // 订单服务通过 Eureka 发现用户服务
    List<ServiceInstance> instances = discoveryClient.getInstances("USER-SERVICE");
    
  3. 声明式调用(Feign 核心功能)
    订单服务通过 Feign 声明调用接口(无需关注具体地址):

    @FeignClient(name = "USER-SERVICE")  // 自动从Eureka查找服务
    public interface UserClient {@GetMapping("/users/{id}")User getUser(@PathVariable Long id);
    }
    
  4. 动态路由 & 负载均衡(Feign + Ribbon)
    Feign 底层集成 Ribbon 实现:

    • 从 Eureka 获取 USER-SERVICE 的所有实例
    • 自动进行负载均衡(如轮询、随机等)
    • 向选中的实例发送 HTTP 请求

关键协作点

1. 服务名称映射
@FeignClient(name = "USER-SERVICE")
//         ^^^^^^^^^^^^^^^^^^^^^^
//         这个名称必须匹配Eureka中的注册名
2. 心跳维持连接
  • Eureka 监控服务提供者状态(30秒心跳)
  • Feign 实时获取健康实例列表,自动剔除故障节点
3. 故障转移

当 USER-SERVICE 某个实例宕机时:

  1. Eureka 检测到心跳停止 → 从注册表移除
  2. Feign 下一次调用自动切换到健康实例

典型架构场景

服务注册
服务注册
1. 查询注册表
2. 声明调用
3. 调用用户服务
3. 调用商品服务
Eureka Server
用户服务
商品服务
订单服务
Feign Client

代码体现关系

订单服务中同时使用两者

@SpringBootApplication
@EnableFeignClients // 启用Feign
@EnableEurekaClient // 注册到Eureka(同时也作为消费者)
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}// Feign客户端(自动从Eureka发现服务)
@FeignClient(name = "USER-SERVICE")
interface UserServiceClient {@GetMapping("/users/{id}")User getUser(@PathVariable Long id);
}

脱离 Eureka 的情况

虽然通常配合使用,但 Feign 也可独立工作:

  1. 直连模式(不推荐):
    @FeignClient(name = "user", url = "http://localhost:8080")
    
  2. 使用其他注册中心(如 Nacos、Consul):
    @FeignClient(name = "user-service") // 从Nacos获取实例
    

Eureka + Feign 是 Spring Cloud Netflix 的黄金组合,共同实现:

  • 动态服务发现
  • 负载均衡
  • 声明式 HTTP 调用
  • 故障自动转移
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/252730.html

相关文章:

  • 重新编译一个不支持 AVX、AVX2的 TensorFlow 1.15的python3.7的安装包
  • Spring Boot 管理系统项目解读
  • Android Studio 中使用 C++ 连接 OpenCV
  • Android studio打包生成jar包文件
  • Spring Cloud使用Eureka调用接口,超时设置(二)
  • Python爬取豆瓣短评并生成词云分析
  • 21 大刷题平台开启编程王者之路
  • Macbook如何关闭掉端口
  • 【WPF】WPF ComboBox 数据驱动不刷新?SelectedItem 与 SelectedIndex 解析!
  • 2025年SYN-CC混合攻击防御实战:某金融平台抵御800Gbps双重风暴实录
  • AI预警,数据“解码”:我们如何用技术为象牙塔筑起金融防火墙?
  • 北航将层次对称性引入多智能体强化学习,提升样本效率
  • 解决 Ruby Gem “rexml“ 版本不兼容问题 (CocoaPods/Firebase 相关错误)
  • vue3-标签的ref属性,props的使用,vue3的生命周期详解
  • 数据结构 双向链表与双向循环链表 6.17
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • QGIS新手教程5:图层属性查询与表达式筛选技巧
  • 鸿蒙组件通用属性深度解析:从基础样式到高级定制的全场景指南
  • AI编程浏览器插件(简易版)
  • 云原生时代配置中心全景解读:从Spring Cloud Config到Nacos深度实践
  • 图扑 HT 3D 场景视频嵌入应用功能
  • JVM(4)——引用类型
  • 【JVM 09-垃圾回收】
  • 【在线五子棋对战】七、数据管理模块实现
  • 依赖已导入,已下载,无法使用问题
  • 【MySQL基础】表的功能实现:增删查改详细讲解
  • 基于大模型的急性梗阻性化脓性胆管炎风险预测与治疗方案研究报告
  • 走进Coinate|迪拜第二大交易平台如何构建极速金融引擎
  • 直线拟合 - 最小二乘法与 RANSAC 算法
  • LeetCode 算 法 实 战 - - - 有 效 的 括 号、用 队 列 实 现 栈、用 栈 实 现 队 列 和 设 计 循 环 队 列