0%

Feign 中获取 Fallback 异常原因:使用 FallbackFactory 实现

在 Feign 中使用服务降级(Fallback)时,仅通过fallback属性指定降级类无法获取导致降级的具体异常原因(如超时、服务不可用等)。此时,fallbackFactory属性是更优的选择,它能捕获异常信息并在降级逻辑中使用,便于问题排查和日志记录。

fallbackfallbackFactory的区别

方式 特点 适用场景
fallback 直接指定降级类,无法获取异常信息 仅需返回默认结果,不关心降级原因
fallbackFactory 通过工厂类创建降级实例,可捕获异常 需要记录降级原因(如日志、监控)

使用fallbackFactory获取异常原因的步骤

1. 定义 Feign 客户端接口,指定fallbackFactory

1
2
3
4
5
6
7
8
9
10
11
12
13
@FeignClient(
name = "SPRINGCLOUD2-PROVIDER", // 目标服务名
contextId = "DeptClient", // 避免同服务名的Feign客户端冲突
fallbackFactory = DeptClientFallbackFactory.class // 指定降级工厂
)
public interface DeptClient {

@GetMapping("/dept/get/{id}")
CommonResult<Dept> getDept(@PathVariable("id") long id);

@GetMapping("/timeout")
String testTimeout();
}

2. 实现FallbackFactory接口,捕获异常信息

通过create(Throwable cause)方法获取异常原因(如连接超时、服务宕机等),并在降级逻辑中处理:

阅读全文 »

自定义 Feign 配置:灵活定制服务调用行为

Feign 的默认配置(FeignClientsConfiguration)提供了基础的编码器、解码器等组件,但在实际开发中,我们常需要根据业务场景自定义配置(如切换原生注解、自定义重试策略等)。通过@FeignClientconfiguration属性,可实现精细化的配置管理。

Feign 默认配置的局限性

FeignClientsConfiguration是 Feign 的默认配置类,其核心 Bean 定义如下:

Bean 类型 默认实现 局限性
Decoder SpringDecoder 依赖 Spring 消息转换器,原生 Feign 特性支持有限
Encoder SpringEncoder 同上
Contract SpringMvcContract 仅支持 Spring MVC 注解(如@RequestMapping
Retryer Retryer.NEVER_RETRY 默认不重试,无法应对瞬时故障
Logger.Level NONE(不输出日志) 调试时缺乏请求细节

当这些默认配置无法满足需求时(如需要使用 Feign 原生注解、自定义重试逻辑),就需要通过自定义配置类覆盖默认实现。

自定义 Feign 配置的实现方式

1. 自定义配置类的编写

通过@Configuration注解定义配置类,并重写需要自定义的 Bean(如契约、重试器、日志级别等):

阅读全文 »

Eureka 多网卡环境下的 IP 选择策略

在多网卡服务器(如同时存在内网、外网、虚拟网卡)中,Eureka Client 可能会自动选择错误的 IP 地址注册到注册中心,导致服务间调用失败。本文详细介绍四种 IP 选择方案,确保服务注册的 IP 地址正确。

核心前提配置

无论采用哪种策略,都需先开启 “IP 优先” 模式,确保 Eureka 注册 IP 而非主机名:

1
2
3
eureka:
instance:
prefer-ip-address: true # 优先使用IP地址注册(必填)

四种 IP 选择方案

1. 忽略指定名称的网卡

通过配置忽略不需要的网卡(如外网网卡、虚拟网卡),让 Eureka 从剩余网卡中选择 IP。

配置方式:
1
2
3
4
5
6
spring:
cloud:
inetutils:
ignored-interfaces: # 忽略的网卡名称(支持正则表达式)
- eth0 # 精确忽略名为eth0的网卡
- veth.* # 忽略所有以veth开头的虚拟网卡(如Docker虚拟网卡)
适用场景:
阅读全文 »

Eureka 元数据:服务实例的扩展信息载体

在 Eureka 中,元数据(Metadata)是服务实例携带的额外信息,用于描述服务的属性或配置。元数据分为标准元数据自定义元数据两类,在服务发现、负载均衡和服务调用中发挥重要作用。

元数据的核心作用

元数据是服务实例的 “身份标签”,主要用途包括:

  • 辅助服务发现:消费者通过元数据筛选合适的服务实例(如按版本号选择服务);
  • 传递配置信息:在服务间传递非业务参数(如权重、环境标识);
  • 健康检查扩展:结合元数据实现自定义健康检查逻辑。

标准元数据

标准元数据是 Eureka 内置的、用于服务通信的基础信息,由 Eureka Client 自动采集并注册,无需手动配置。

包含的核心信息

元数据项 说明 对应配置参数(可选)
hostName 服务实例的主机名 eureka.instance.hostname
ipAddress 服务实例的 IP 地址 eureka.instance.ip-address
port 服务端口(非 SSL) server.port
securePort SSL 端口(默认 443) eureka.instance.secure-port
statusPageUrl 服务状态页地址(如/actuator/info eureka.instance.status-page-url
healthCheckUrl 健康检查页地址(如/actuator/health eureka.instance.health-check-url
serviceId 服务名称(即spring.application.name spring.application.name
instanceId 服务实例唯一标识 eureka.instance.instance-id

特点

阅读全文 »

XPath 语言:XML 文档的高效查询工具

XPath(XML Path Language)是一门专门用于在 XML 文档中定位和选择节点的查询语言,它通过简洁的路径表达式,能够快速定位 XML 文档中的特定元素、属性或文本,常与 XML 解析器(如 DOM、SAX)结合使用,广泛应用于数据提取、配置文件解析等场景。

XPath 的核心概念:节点

XPath 将 XML 文档视为一个节点树,所有内容都被抽象为不同类型的节点,主要包括:

节点类型 说明 示例
文档根节点 整个文档的根(非整个文档的最外层元素) 无具体名称,代表整个 XML 文档树
元素节点 XML 中的标签元素 <book><name>
属性节点 元素的属性 id="1001"中的id属性
文本节点 元素内的文本内容 <name>XML指南</name>中的 “XML 指南”
注释节点 XML 中的注释 <!-- 这是注释 -->
处理指令节点 用于指导解析器的指令 <?xml version="1.0"?>
命名空间节点 元素声明的命名空间 xmlns:xs="http://www.w3.org/2001/XMLSchema"

XPath 路径表达式:定位节点的核心语法

XPath 通过路径表达式选取节点或节点集,表达式由多个 “步” 组成,步之间用斜线(/)分隔。例如:/bookstore/book/name表示选取根节点下bookstore元素的子元素book中的name元素。

路径表达式的基本格式

每个 “步” 的完整语法为:

阅读全文 »