3、SpringCloud OpenFeign 声明式远程调用
1)简介
Feign 是一个声明式的 HTTP 客户端,它的目的就是让远程调用更加简单。Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。
Feign 整合了 Ribbon (负载均衡) 和 Hystrix (服务熔断),可以让我们不再需要显式地使用这两个组件。
Spring Cloud Feign 在 Netfix Feign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了 Spring Cloud Ribbon 自行封装服务调用客户端的开发量。
2)使用
1、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、开启 feign 功能
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
3、 编写一个接口,告诉 Spring Cloud 这个接口需要调用远程服务
声明接口的每一个方法都是调用哪个远程服务的那个请求
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
/**
* 远程调用的路径写全
*
* @return {@link R}
*/
@RequestMapping("/coupon/coupon/member/list")
public R memberCoupons();
}
4、编写 controller
@Autowired
private CouponFeignService couponFeignService;
@GetMapping("/coupons")
public R test() {
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("don");
R memberCoupons = couponFeignService.memberCoupons();
return R.ok().put("member", memberEntity).put("coupons", memberCoupons.get("test"));
}
5、远程服务编写
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Autowired
private CouponService couponService;
/**
* 会员优惠券 测试
*
* @return {@link R}
*/
@Reques