SpringCloud-OpenFeign远程调用
本文简单记录利用SpringCloud的OpenFeign组件进行微服务之间的远程调用步骤,不涉及底层原理哦。
进行远程调用之前需要搭建SpringCloud依赖和Nacos作为微服务的注册发现中心。
- 两个微服务模块,这里使用mall-coupon(优惠券)和mall-member(会员)服务,目标是访问mall-member微服务的一个请求,该请求中调用mall-coupon微服务的一个方法。
- 添加依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 要调用的方法(在mall-coupon 微服务中)
没必要关注代码内容,大概意思就是返回一个R类型(继承HashMap)的数据集,键为“coupons” ,值为一张“买一百送一千”的优惠券。
@RequestMapping("coupon/coupon/member/list")
public R memberCoupons(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("买一百送一千");
return R.ok().put("coupons", Arrays.asList(couponEntity));
}
- 声明接口(在mall-member 微服务中,写在feign包下),声明接口中的每个方法对应哪个微服务的哪个请求。
/**
* @author: lvshui5u
* @date: 2021/6/15 15:22
* @describe: 告诉SpringCloud,声明接口中的每一个方法对应调用哪个微服务的哪个请求
*/
// 指定需要调用的微服务
@FeignClient("mall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R memberCoupons();
}
- mall-member微服务中的请求,其中调用了上述声明的接口,相当于调用了mall-coupon微服务中的请求。
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("member/member/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"));
}
- 开启远程调用功能(在mall-member微服务的启动方法中)
// 该注解用来开启远程调用功能
@EnableFeignClients(basePackages = "com.lvshui5u.lvshui5umall.member.feign")
- 开启这两个微服务模块,网页访问http://localhost:8000/member/member/coupons,得到结果显示
{
"msg": "success",
"code": 0,
"coupons": [
{
"id": null,
"couponType": null,
"couponImg": null,
"couponName": "买一百送一千",
"num": null,
"amount": null,
"perLimit": null,
"minPoint": null,
"startTime": null,
"endTime": null,
"useType": null,
"note": null,
"publishCount": null,
"useCount": null,
"receiveCount": null,
"enableStartTime": null,
"enableEndTime": null,
"code": null,
"memberLevel": null,
"publish": null
}
],
"member": {
"id": null,
"levelId": null,
"username": null,
"password": null,
"nickname": "李四",
"mobile": null,
"email": null,
"header": null,
"gender": null,
"birth": null,
"city": null,
"job": null,
"sign": null,
"sourceType": null,
"integration": null,
"growth": null,
"status": null,
"createTime": null
}
}