OpenFeign 支持接口继承,这允许你通过创建一个基础接口来定义公共的 Feign 客户端方法,然后其他接口可以继承这个基础接口。这种方式有助于代码复用,特别是当多个 Feign 客户端需要共享一些通用的方法签名和配置时。
例如,假设你有一个微服务架构,其中多个服务都需要调用用户服务来获取用户信息。你可以创建一个基础的 UserServiceClient 接口,在这个接口中定义获取用户基本信息(如 getUserById 方法)和获取用户权限信息(如 getUserPermissionsById 方法)等通用的方法。然后,其他具体的业务接口(如 OrderServiceClient 需要用户信息来处理订单相关事务,ContentServiceClient需要用户信息来提供个性化内容等)可以继承这个 UserServiceClient 接口。
UserService.java 是基础接口,仅有 getUser 方法定义:
public interface UserService {
@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")
User getUser(@PathVariable("id") long id);
}UserResource.java 是具体的服务实现类,通过实现该接口提供真实的服务,如下:
@RestController
public class UserResource implements UserService {
@RequestMapping(method = RequestMethod.GET, value ="/users/{id}")
public User getUser(@PathVariable("id") long id) {
//...忽略...
}
}创建 UserClient.java 接口,继承上面的 UserService 接口,避免重复编写方法定义信息,如下:
package project.user;
@FeignClient("users")
public interface UserClient extends UserService {
// 这里不需要重复定义 getUser 方法
}注意:@FeignClient 接口不应该在服务器和客户端之间共享,并且不再支持在类级别上用 @RequestMapping 注解 @FeignClient 接口。