Skip to content

服务间通信配置

Maven坐标

xml
<dependency>
    <groupId>com.ikingtech.framework</groupId>
    <artifactId>sdk-Feign</artifactId>
</dependency>

服务间通信配置


Feign 配置

1.在 FeignConfiguration 类中,对 Feign 进行了一些基本的配置:

  • 启用了 Feign 客户端,并指定了需要扫描的包路径。

  • 当系统属性 GLOBAL_CONFIG_PREFIX + ".web.arch" 的值为 "micro_service" 或者没有设置时,这个配置类会被加载。

  • 提供了三个 Bean,分别是一个 FeignErrorReason 实例、一个 ErrorDecoder 实例和一个 RequestInterceptor 实例。

错误解码器

  • DefaultFeignReasonFeignErrorDecoder 类中,定义了一个默认的 Feign 错误原因提取方式和错误解码器:

  • DefaultFeignReason 类实现了 FeignErrorReason 接口,用于从响应体中提取出具体的错误消息。

  • FeignErrorDecoder 则是一个 Feign 的错误解码器,当接口调用失败时,它会根据 FeignErrorReason 提取出错误原因,并抛出一个 FrameworkException 异常。

使用说明

🙅注意

下面的仅是使用示例,不代表所有用法。

  1. 通过pom文件引入依赖。
xml
<dependency>
	<groupId>com.ikingtech.platform</groupId>
	<artifactId>service-Feign</artifactId>
</dependency>
  1. 首先,需要在 Spring 的配置文件中设置 GLOBAL_CONFIG_PREFIX + ".web.arch" 的值为 "micro_service",以启用这个配置。然后,在你的应用中创建一个接口,并使用 @FeignClient 注解标注它
  • 示例:
java
@FeignClient("user-service")
public interface UserService {
    @GetMapping("/users/{id}")
    User getUser(@PathVariable("id") Long id);
}

当你需要调用这个服务时,只需注入这个接口,并直接调用其方法即可。例如:

java
@Autowired
private UserService userService;

public User findUserById(Long id) {
    return userService.getUser(id);
}

错误处理方面,你可以使用 try-catch 块来捕获 FrameworkException 异常,获取其中的错误原因:

  • 示例:
java
try {
    return userService.getUser(id);
} catch (FrameworkException e) {
    log.error("Failed to get user: {}", e.getMessage());
    throw e;
}

至于身份验证,只需在每次请求时都带上 HEADER_CALLER 和 HEADER_IDENTITY 这两个请求头即可。如果你的请求中没有提供这两个头信息,那么默认会被视为内部调用,并使用默认的用户信息。

注意事项

确保已经正确配置了 Feign。如果在 Spring 的配置文件中没有设置 GLOBAL_CONFIG_PREFIX + ".web.arch" 的值为 "micro_service" 或者系统属性中没有找到这个值,那么 Feign 配置将不会被加载。

接口定义需要注意:接口的方法和远程服务方法的请求方式、路径以及参数需要完全一致,否则将无法正确调用。

在捕获异常时,请确保捕获的是 FrameworkException 异常。这是因为错误解码器将所有的 Feign 错误转换为该类型的异常。

HEADER_CALLER 和 HEADER_IDENTITY 这两个头信息对于身份验证非常关键。如果在请求中没有提供这两个头信息,那么默认会被视为内部调用,并使用默认的用户信息。如果调用方和被调用方有不同的用户身份需求,需要确保这两个头信息的准确性。