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 接口。