1.简介
Feign 是一个声明式的 HTTP 客户端,它的目的就是让远程调用更加简单。Feign 提供了 HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。
Feign 整合了 **Ribbon(负载均衡)**和 Hystrix(服务熔断),可以让我们不再需要显式地使用这两个组件。
SpringCloudFeign 在 NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了SpringCloudRibbon 自行封装服务调用客户端的开发量
2.pom中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.CouponController中添加memberCoupons
/**
* 远程调用测试(会员与优惠券)
* @return
*/
@RequestMapping("/member/list")
public R memberCoupons(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满100减10");
return R.ok().put("coupons",Arrays.asList(couponEntity));
}
4.声明式远程接口
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();
}
5.启动类上加@EnableFeignClients
6.MemberController中新增testFeign
/**
*测试远程调用(会员与优惠券)
*/
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("/feign/memberCoupon")
public R testFeign(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("java小生不才");
R memberCoupons = couponFeignService.memberCoupons();
return R.ok().put("member",memberEntity)
.put("coupon",memberCoupons.get("coupons"));
}
7.访问