目录
- 前言
- Spring Cloud Feign继承
- 创建Feign 接口api服务
- 创建服务提供者
- 创建服务消费者
- 另一种方式
前言
Spring Cloud系列文章大多是有联系的,最好是从第一篇开始看起
Spring Cloud系列: 点击查看Spring Cloud系列文章
Spring Cloud Feign继承
Feign 的继承特性可以让服务的接口定义单独抽出来,作为公共的依赖,实现代码的共享,减少跨服务调用服务编写的问题,方便使用。
创建Feign 接口api服务
1、创建一个 Maven 项目 feign-inherit-api,用于存放 API 接口的定义,增加 Feign 的依赖,代码如下所示。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、定义接口,指定服务名称,代码如下所示。
@FeignClient("feign-inherit-provide")
public interface UserRemoteClient {
@GetMapping("/user/name")
String getName();
}
创建服务提供者
1、创建一个服务提供者工程 feign-inherit-provide,引入 feign-inherit-api(即api服务),代码如下所示。
<dependency>
<groupId>net.biancheng</groupId>
<artifactId>feign-inherit-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、创建一个Controller类,实现 UserRemoteClient 接口,即接口的具体实现是在服务提供工程中实现的,代码如下所示。
@RestController
public class DemoController implements UserRemoteClient {
@Override
public String getName() {
return "zhangsan";
}
}
注:实现了UserRemoteClient 接口当然就要实现UserRemoteClient 接口中的方法。不同的是我这里不需要在方法上面添加@GetMapping注解,这些注解在父接口中都有,不过在Controller上还是要添加@RestController注解,另外需要注意的是,方法中的参数@RequestHeader和@RequestBody注解还是要添加,@RequestParam注解可以不添加。
创建服务消费者
创建一个服务消费者 feign-inherit-consume,同样需要引入 feign-inherit-api 用于调用 feign-inherit-provide 提供的 /user/name 接口
1、引入依赖
<dependency>
<groupId>net.biancheng</groupId>
<artifactId>feign-inherit-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、直接注入UserRemoteClient进行调用
@RestController
public class DemoController {
@Autowired
private UserRemoteClient userRemoteClient;
@GetMapping("/call")
public String callHello() {
String result = userRemoteClient.getName();
System.out.println("getName调用结果:" + result);
}
}
另一种方式
其实还有一种方式,我们可以不在api工程指定服务,而在消费者指定服务,如下
1、api工程定义接口
public interface UserRemoteClient {
@GetMapping("/user/name")
String getName();
}
注意:定义的是普通接口,而不是feign接口
2、导入api依赖,在服务提供者工程实现接口
@RestController
public class DemoController implements UserRemoteClient {
@Override
public String getName() {
return "zhangsan";
}
}
3、消费者工程导入api依赖,创建RefactorUserService,继承feign-interface-api的UserRemoteClient 接口,然后添加@FeignClient来绑定服务,如下:
@FeignClient(value = "feign-interface-provide")
public interface RefactorUserService extends UserRemoteClient {
}
注:这个接口中不需要添加任何方法,方法都在父接口中,这里只需要在类上面添加@FeignClient(“feign-interface-provide”)注解来绑定服务即可。
在需要使用的地方,注入RefactorUserService实例进行调用
@RestController
public class DemoController {
@Autowired
private RefactorUserService userRemoteClient;
@GetMapping("/call")
public String callHello() {
String result = userRemoteClient.getName();
System.out.println("getName调用结果:" + result);
}
}