0%

FeignClient远程调用

  • 引入OpenFeign依赖

  • 定义FeignClient接口类(注解@FeignClient),声明这个接口类是用来远程调用其他服务的

  • 接口类中定义要远程调用的接口方法 ,指定远程服务方法的路径

  • Controller类中调用接口方法

  • 开启远程调用(注解@EnableFeignClients

  • 远程调用的流程:

    • @RequestBody将这个对象转为json
    • 找到passjava-study服务,给study/studytime/member/list/test服务发送请求
    • 将json放到请求体里面,发送请求
    • 对方服务收到请求,请求体里有json数据
    • 将请求体中的json数据转换成对方服务的参数类型。只需要两边的字段名称和类型是一致的。

例如:

1.引起open-feign依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在要调用的服务coupons写一个请求方法

1
2
3
4
5
6
@RequestMapping("/member/list")
public R membercoupons(){
CouponEntity couponEntity=new CouponEntity();
couponEntity.setCouponName("满100减10");
return R.ok().put("coupons", Arrays.asList(couponEntity));
}

3.在member服务编写一个接口,就是写一个service,告诉SpringCloud这个服务需要远程调用

1
2
3
4
5
6
注意声明每一个方法都是调用哪个远程服务的请求
@FeignClient("gulimall-coupon") //调用的服务
public interface CouponFeignService {
@RequestMapping("/coupon/member/list")//请求,注意是完整请求路径
public R membercoupons();//请求的方法
}

4.在member写调用请求

1
2
3
4
5
6
7
8
9
10
11
@Autowired
CouponFeignService couponFeignService;


@RequestMapping("/coupons")
public R test(){
MemberEntity memberEntity=new MemberEntity();
memberEntity.setNickname("张三");
R membercoupons= couponFeignService.membercoupons();
return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
}

5.在启动类开启调用功能,并指定向刚刚写的接口包的路

1
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")

6.总结

1
/coupons请求--->调用CouponFeignService接口--->通过@FeignClient注解扫描到gulimall-coupon服务--->调用/coupon/coupon/member/list请求--->执行membercoupons方法
----------本文结束感谢您的阅读----------