谷粒商城-全栈-12 分布式组件-SpringCloud OpenFeign 测试远程调用
OpenFeign进行远程调用
feign使用三步:
- 1、导包 openfeign
- 2、开启@EnbableFeignClients 功能
- 3、编写接口,进行远程调用
我们的项目在创建的时候已经添加了 OpenFeign 依赖,如果还没有添加,则需引入依赖:
修改pom.xml文件添加OpenFeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
修改 com.atguigu.gulimall.coupon.controller.CouponController
作为调用测试
@RequestMapping("/member/list")
public R membercoupons(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("100减50");
return R.ok().put("coupons",Arrays.asList(couponEntity));
}
新建 com.atguigu.gulimall.member.feign.CouponFeignService
实现调用接口
package com.atguigu.gulimall.member.feign;
import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R membercoupons();
}
启用Feign调用功能com.atguigu.gulimall.member.GulimallMemberApplication
//在服务启动时会自动扫描Feign包下的路径
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
创建接口com.atguigu.gulimall.member.controller.MemberController
@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"));
}
启动微服务gulimall-coupon、gulimall-member,并开启nacos服务,访问 localhost:8000/member/member/coupons
报错了,错误信息:
context with path [] threw exception [Request processing failed; nested exception is feign.RetryableException: Read timed out executing GET http://gulimall-coupon/coupon/coupon/member/list] with root cause
原来是因为开了代理,所以,注册中心没有找到gulimall-coupon 的IP地址,关掉VPN,然后重启服务。
http://localhost:8000/member/member/coupons
{
"msg": "success",
"code": 0,
"coupons": [
{
"id": null,
"couponType": null,
"couponImg": null,
"couponName": "满100减10",
"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
}
}
小结
想要远程调用别的服务
1)、引入open-feign
2)、编写一个接口,告诉SpringCloud这个接口需要调用远程服务。
1、声明接口的每一个方法都是调用哪个远程服务的那个强求
3)、开启远程调用功能 (@EnableFeignClients)
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)