服务注册到注册中心后,服务之前使用OpenFeign来进行远程调用。
Feign 是一个声明式的 HTTP 客户端,它的目的就是让远程调用更加简单。
Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。
Feign 整合了 Ribbon(负载均衡)和 Hystrix(服务熔断),可以让我们不再需要显式地使用这两个组件。 SpringCloudFeign 在NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了 SpringCloudRibbon 自行封装服务调用客户端的开发量。
pom.xml 引入OpenFeign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
使用@EnableFeignClients 开启OpenFeign
@EnableFeignClients(basePackages = "com.xxx.xxx.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
com.xxx.xxx.feign包下声明远程接口
被调用服务方(applicationname = gulimall-coupon)接口
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Autowired
private CouponService couponService;
/**
* 列表
*/
@RequestMapping("/list")
//@RequiresPermissions("coupon:coupon:list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = couponService.queryPage(params);
return R.ok().put("page", page);
}
}
相当于将被调用方的http接口复制过来,去掉方法体。
调用方编写的feign接口
@FeignClient("gulimall-coupon")//需要调用的服务的服务名
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/list")
public R membercoupons();
}
编写Controller接口调用Feign接口
@RestController
public class FeignTestController {
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("/couponFeign")
public R list(@RequestParam Map<String, Object> params){
return couponFeignService.membercoupons();
}
}