服务间通信配置
Maven坐标
<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
实例。
错误解码器
在
DefaultFeignReason
和FeignErrorDecoder
类中,定义了一个默认的 Feign 错误原因提取方式和错误解码器:DefaultFeignReason
类实现了FeignErrorReason
接口,用于从响应体中提取出具体的错误消息。FeignErrorDecoder
则是一个 Feign 的错误解码器,当接口调用失败时,它会根据FeignErrorReason
提取出错误原因,并抛出一个FrameworkException
异常。
使用说明
🙅注意
下面的仅是使用示例,不代表所有用法。
- 通过pom文件引入依赖。
<dependency>
<groupId>com.ikingtech.platform</groupId>
<artifactId>service-Feign</artifactId>
</dependency>
- 首先,需要在 Spring 的配置文件中设置 GLOBAL_CONFIG_PREFIX + ".web.arch" 的值为 "micro_service",以启用这个配置。然后,在你的应用中创建一个接口,并使用
@FeignClient
注解标注它
- 示例:
@FeignClient("user-service")
public interface UserService {
@GetMapping("/users/{id}")
User getUser(@PathVariable("id") Long id);
}
当你需要调用这个服务时,只需注入这个接口,并直接调用其方法即可。例如:
@Autowired
private UserService userService;
public User findUserById(Long id) {
return userService.getUser(id);
}
错误处理方面,你可以使用 try-catch 块来捕获 FrameworkException 异常,获取其中的错误原因:
- 示例:
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 这两个头信息对于身份验证非常关键。如果在请求中没有提供这两个头信息,那么默认会被视为内部调用,并使用默认的用户信息。如果调用方和被调用方有不同的用户身份需求,需要确保这两个头信息的准确性。