第十章:SpringCloud组件-Feign远程调用
示例:在mall-member中远程调用mall-coupon的优惠券信息
1:在onlinemall-member中引入openfeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2:在onlinemall-coupon中构建被调用的业务
com.applesnt.onlinemall.coupon.controller.CouponController
/*模拟获取会员优惠券*/
@RequestMapping("/member/coupons")
public R couponList(){
//创建一个优惠券对象
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("立减100");
//返回这个优惠券对象
return R.ok().put("coupons",couponEntity);
}
3:在onlinemall-member中构建远程调用接口
在com.applesnt.onlinemall.member目录下创建feign包,所有的涉及到coupon的远程接口都写在这个包下
接着在com.applesnt.onlinemall.member.feign目录下创建优惠券的远程调用接口CouponFeignService
1、增加注解:@FeignClient
2、把需要调用的业务签名(方法)复制过来即可,注意签名的RequestMapping路径要写全路径
/*onlinemall-coupon:表示被远程调用的服务注册名称*/
@FeignClient("onlinemall-coupon")
public interface CouponFeignService {
//把被调用业务的签名复制过来即可,RequestMapping要写全路径
@RequestMapping("/coupon/coupon/memeber/couponlist")
public R memeberCoupon();
}
4:在onlinemall-member的启动类中开启远程调用
增加注解:@EnableFeignClients
//开启远程调用,basePackages表示接口所在的位置
@EnableFeignClients(basePackages = "com.applesnt.mall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class MallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(MallMemberApplication.class, args);
}
}
5:在onlinemall-member中测试远程调用
com.applesnt.onlinemall.member.controller.MemberController
@RestController
@RequestMapping("member/member")
public class MemberController {
@Autowired
private MemberService memberService;
//注入远程调用接口
@Autowired
private CouponFeignService couponFeignService;
/*
*浏览器访问,查看远程调用的输出结果
*http://localhost:8000/member/member/coupons
**/
@RequestMapping("/coupons")
public R getMemberCoupon(){
return R.ok().put("coupons",couponFeignService.couponList());
}