文章目录


简介

Feign 是一个声明式的HTTP客户端。目的让远程调用更加简单。Feign 提供了HTTP请求的模板,通过编写简单的接口和插入注解,可以定义好HTTP请求的参数,格式,地址等信息

Feign整合了Ribbon(负载均衡)和 Hystrix (服务熔断),可以让我们不再显式使用这两个组件

Spring Cloud Feign 在NetfixFeign 的基础上扩展了对SpringMVC注解的支持,在其实现下,只需创建一个接口并用注解的方式配置,完成对服务提供方的接口绑定,简化了Spring Cloud Ribbon自行封装服务调用客户端的并发量

使用

1.需要被远程调用的模块加入依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在需要调用的模块中,写入接口

@RequestMapping("/member/list")
public R membercoupons() {
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("618年中促");
return R.ok().put("coupons",Arrays.asList(couponEntity));

}

3.编写接口,告诉SpringCloud这个接口需要调用远程服务

/**
* 远程调用,nacos 中服务名
*/
@FeignClient("gulimail-coupon")
public interface CouponFeignService {

@RequestMapping("/coupon/coupon/member/list")
public R membercoupons();

}

4.开启远程调用功能

@EnableFeignClients(basePackages = “com.atguigu.gulimail.member.feign”)

@EnableFeignClients(basePackages = "com.atguigu.gulimail.member.feign")
@EnableDiscoveryClient
@MapperScan("com.atguigu.gulimail.member.dao")
@SpringBootApplication
public class GulimailMemberApplication {

public static void main(String[] args) {
SpringApplication.run(GulimailMemberApplication.class, args);
}

}

5.接口调用

@Autowired
CouponFeignService couponFeignService;

@RequestMapping("/coupons")
public R test() {
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("zyd");

R membercoupons = couponFeignService.membercoupons();
return R.ok().put("members",memberEntity).put("coupons",membercoupons.get("coupons"));
}
http://localhost:8000/member/member/coupons