Feign远程调用

267 阅读1分钟

服务注册到注册中心后,服务之前使用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();
    }

}