1、引入open-feign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、编写一个接口,告诉SpringCloud这个接口需要调用远程服务
- 该接口是在本服务中编写。
@FeignClient(value = "")
,value
需要调用的远程服务的名字。
@RequestMapping(value = "")
,value
远程服务的方法请求路径。
- 这个接口的意思就是要调用的什么服务的什么方法。
- 声明接口的每一个方法都是调用哪个远程服务的那个请求
@FeignClient(value = "application.name")
public interface CouponFeignService {
@RequestMapping("请求路径")
public R coupons();
}
3、开启远程服务调用
@EnableFeignClients
开启远程服务调用,basePackages
声明接口所在的包(可以不写)
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "")
public class MemberApplication {
public static void main(String[] args) {
SpringApplication.run(MemberApplication.class, args);
}
}
4、有两种方法请求远程数据(前提是有配置网关)
- 让所有请求都发给网关,再由网关转给对应的服务
- 向上面那样直接发给对服务
5、远程调用服务的过程
* 1 FeignService.saveXXX(XXXTo)
* 1 SpringCloud 会将这个对象转为json
* 2 找到对应的微服务,给相应请求/xx/xxx发送请求
* 将上一步转的jso放在请求位置,发送请求
* 3 对方服务受到请求,请求体里面有json数据,
* @RequestBody XXXEntity xxx 将请求体的json转为XXXEntity
* 只要json数据模型是兼容的,双方服务无需使用同一个to