Eureka 与 Feign 知识解析

1. Eureka

Spring Cloud Eureka 是服务发现组件,包含:

  • Eureka Server:注册中心,管理服务实例
  • Eureka Client:服务实例,向注册中心注册/获取服务信息

核心功能:

  • 服务注册与发现
  • 心跳检测(默认30秒)
  • 服务故障自动剔除
  • 客户端缓存注册信息
2. OpenFeign

声明式 HTTP 客户端工具,核心特性:

  • 基于接口的声明式调用
  • 整合 Ribbon 实现负载均衡
  • 整合 Hystrix 实现熔断(需额外配置)
  • 自动处理 HTTP 请求/响应序列化
依赖关系
<!-- Eureka Server -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency><!-- Eureka Client + OpenFeign -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

完整示例代码

1. Eureka Server (服务注册中心)

application.yml

server:port: 8761
eureka:client:register-with-eureka: falsefetch-registry: false

EurekaServerApplication.java

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
2. Service Provider (服务提供者)

application.yml

server:port: 8081
spring:application:name: user-service
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/

UserController.java

@RestController
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return new User(id, "用户" + id, "user" + id + "@example.com");}
}// 实体类
public class User {private Long id;private String name;private String email;// 构造方法/getters/setters
}
3. Service Consumer (服务消费者)

application.yml

server:port: 8080
spring:application:name: order-service
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/

Feign Client 接口

@FeignClient(name = "user-service")
public interface UserServiceClient {@GetMapping("/users/{id}")User getUserById(@PathVariable("id") Long userId);// 请求参数示例@GetMapping("/users/search")User searchUser(@RequestParam("name") String name);
}

OrderController.java

@RestController
@RequestMapping("/orders")
public class OrderController {@Autowiredprivate UserServiceClient userServiceClient;@GetMapping("/{orderId}/user")public User getOrderUser(@PathVariable Long orderId) {// 通过Feign调用用户服务Long userId = orderId * 10; // 模拟用户IDreturn userServiceClient.getUserById(userId);}
}

启用Feign (主类)

@SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}
4. 高级配置

自定义Feign配置

@Configuration
public class FeignConfig {@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL; // 详细日志}@Beanpublic RequestInterceptor authInterceptor() {return template -> template.header("Authorization", "Bearer token123");}
}

使用配置

@FeignClient(name = "user-service",configuration = FeignConfig.class,fallback = UserServiceFallback.class // 熔断回退
)
public interface UserServiceClient { ... }

熔断回退实现

@Component
public class UserServiceFallback implements UserServiceClient {@Overridepublic User getUserById(Long userId) {return new User(0L, "备用用户", "fallback@example.com");}
}

日志配置 (application.yml)

logging:level:org.springframework.cloud.openfeign: DEBUG

测试流程

  1. 启动 Eureka Server (8761端口)
  2. 启动 User Service (8081端口)
  3. 启动 Order Service (8080端口)
  4. 访问测试:http://localhost:8080/orders/123/user

关键概念总结

  1. 服务注册:Provider 启动时向 Eureka 注册信息
  2. 服务发现:Consumer 通过服务名发现 Provider
  3. 负载均衡:Feign 自动实现多实例轮询
  4. 声明式调用:定义接口即完成远程调用
  5. 熔断机制:快速失败 + 服务降级

:当前 Spring Cloud 版本默认使用 LoadBalancer 替代 Ribbon,最新版 OpenFeign 已内置负载均衡能力。

通过这个完整示例,可以清晰看到Eureka实现服务治理、Feign简化服务调用的协作过程,是构建微服务架构的基础设施。

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

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

相关文章

AN动画软件|Animate 2025百度云下载与安装教程指南

如大家所了解的&#xff0c;‌Animate全称Adobe Animate&#xff0c;常常也被简称为AN。它是一款2D动画制作软件‌&#xff0c;其前身为Flash Professional CC&#xff0c;2016年更名为Animate CC&#xff0c;支持Flash SWF文件及HTML5动画创作&#xff0c;广泛应用于网页交互、…

提示词工程中常见协议框架应用实例

一、生成式诊断催化协议(Generative Diagnosis Catalysis, GDC) 技术原理:基于神经符号系统的因果推理引擎,融合贝叶斯网络与强化学习 实施场景: class DiagnosticCatalyst:def __init__(self, domain="医疗诊断"):self.causal_graph

资深Java工程师的面试题目(七)JDK JVM

以下是针对 Java 面试者 的 JVM 和 JDK 相关题目&#xff0c;涵盖核心知识点、实际应用场景和进阶问题&#xff1a; 一、JVM 基础 1. JVM 内存模型 题目&#xff1a; 请描述 JVM 的内存模型及其组成部分&#xff0c;并说明每个区域的作用。 解析&#xff1a; JVM 内存模型分…

【系统设计【4】】设计一个限流器:从理论到实践的完整解决方案

文章目录 第一步&#xff1a;理解问题并确定设计范围1、为什么需要限流器2、需求澄清的艺术3、需求总结与优先级 第二步&#xff1a;提出高层次设计并获得认同1. 限流器的部署位置选择2. 限流算法的选择与权衡3. 高层架构设计 第三步&#xff1a;深入设计1、限流规则的设计与管…

基于DETR目标检测项目

DETR见解 DETR&#xff08;Detection Transformer&#xff09;是一种端到端的目标检测模型&#xff0c;由Facebook AI Research&#xff08;FAIR&#xff09;于2020年提出。DETR采用了Transformer架构&#xff0c;与传统的基于区域的目标检测方法有所不同&#xff0c;它通过全…

ZooKeeper 集群部署

ZooKeeper 集群部署 前言安装部署资源下载JDK 部署Zookeeper 部署 前言 在 Linux 服务器上部署 Zookeeper 之前&#xff0c;需要先安装 JDK。以下是相关版本及环境信息&#xff1a; JDK 版本 jdk-17_linux-x64_bin.tar.gz Zookeeper 部署的版本 3.5.7 操作系统版本 Red Hat E…

8.TCP Server端实现

1.C/S模型 2.Server 端功能分析 tcp_server.c #include "tcp_server.h" #include "lwip/sockets.h" #include <stdio.h>char ReadBuff[BUFF_SIZE]; /* TCP服务器任务函数 */ void vTcpserver_Task(void) {int sfd, cfd, n, i;struct sockaddr_in…

课设作业图书管理系统

用户注册&#xff0c;登录 播放地址 课设作业图书管理系统_哔哩哔哩_bilibili 对图书进行增删改查 package com.xwr.controller; import com.xwr.entity.Book; import com.xwr.entity.Category; import com.xwr.service.BookService; import com.xwr.service.CategoryServ…

springboot 配置加密

springboot 配置加密 [TOC](springboot 配置加密) 前言一、在配置类赋值之前解密二、修改赋值后加密的配置类 前言 在一些国家项目中经常会要求不能暴露数据库链接和密码, 所以需要对配置文件里面的一些配置进行加密处理。 解决方法有两种&#xff1a;一种是在配置加载后还没给…

【操作系统】macOS软件提示“已损坏,打不开”的解决方案

macOS软件提示“已损坏&#xff0c;打不开”的解决方案 在使用 macOS 系统时&#xff0c;不少用户都遇到过这样的情况&#xff1a;当尝试打开某个应用程序时&#xff0c;系统弹出提示“xxx 已损坏&#xff0c;打不开。您应该将它移到废纸篓”&#xff0c;或者显示“无法打开‘…

数据库系统概论(二十)数据库恢复技术

数据库系统概论&#xff08;二十&#xff09;数据库恢复技术 前言一、事务的基本概念1. 什么是事务&#xff1f;2. 事务的两种"打开方式"2.1 隐式事务2.2 显式事务&#xff1a;自己动手打包操作 3. 事务的四大"铁律3.1 原子性3.2 一致性3.3 隔离性3.4 持久性 4.…

java将pdf文件转换为图片工具类

一、相关依赖 <!-- PDFBox for PDF processing --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version></dependency>二、工具类 import org.apache.pdfbox.p…

零门槛探索国产数据库硬核实力 —— 金仓数据库在线体验平台体验记

1、 金仓数据库在线体验平台 最近&#xff0c;我发现了一个超棒的数据库宝藏 —— 金仓数据库在线体验平台。它在金仓社区上线后&#xff0c;凭借 “零门槛体验 多场景交互” 的特点&#xff0c;迅速吸引了众多数据库爱好者的目光&#xff0c;我也忍不住去体验了一番。 2、 …

Linux基本操作指令和vim编译器

基本指令 查看日期与日历 data 指令 显示日期 用法1&#xff1a;data CST&#xff1a;China Standard Time 时区&#xff0c;中国标准时间 用法2&#xff1a; data 指定格式 常用格式&#xff1a; “%Y-%m-%d”(%F): 2025-06-16“%H:%M:%S”(%T): 20:19:45“%F%T”用法3&am…

“从HTTP到TCP/IP的旅程“-----深入浅出Java Web通信

先放结构图&#xff1a; 一、引言&#xff1a;网络通信就像寄快递 想象一下我们在网上买了一本书&#xff0c;整个配送过程是这样的&#xff1a; 应用层&#xff1a;你在购物网站填好收货地址&#xff08;HTTP请求&#xff09;传输层&#xff1a;快递公司把包裹打包&#xf…

docker build使用代理以实现构建过程中下载Github源码等操作

在通过Dockerfile构建docker容器的过程中&#xff0c;经常会需要在构建过程中拉取Github上的代码。当宿主机配好代理&#xff0c;但容器内是一个隔离的环境&#xff0c;若想在容器内访问&#xff0c;则需再打通容器和宿主机之间的代理配置。 方法一&#xff1a; 若宿主机上的…

Docker 快速搭建一个基于 GPT-Vis 组件的统计图表生成服务

以下是对工具简单介绍&#xff1a; 可以在服务端使用 GPT-Vis 统计图表组件直接渲染成图片支持Docker一键部署&#xff0c;提供统计图表渲染生成API接口支持多种GPT-Vis支持的组件&#xff0c;包括折线图、柱形图、饼图、面积图、条形图、直方图、散点图、词云图、雷达图、思维…

hal库练习1

要求&#xff1a;一个按键实现呼吸灯的控制&#xff0c;一个按键控制LED灯的闪烁&#xff0c;串口发送数据控制灯的开关 定时器配置 1.选择需要的定时器2.配置基础参数&#xff08;根据时钟树给定时器输入的时钟&#xff09;3.打开中断4.在主函数里打开中断 定时器扫描按键 …

java线程(4)

程序(program) 是为完成制定任务,用某种语言编写的一组指令的集合.简单的话说:就是我们写的代码. 进程 1.进程是指进行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间,当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间. 2、…

02《F8Framework》核心入口 FF8.cs

FF8.cs类是 F8Framework的核心入口 采用单例模式 提供对各个功能模块的全局访问 【特点】通过静态类FF8统一访问所有功能 1.模块化设计&#xff1a; 每个功能独立 通过 ModuleCenter 统一管理 2.懒加载机制&#xff1a; …