Feign 声明式远程调用

本文共1908字,阅读本文大概需要4~6分钟

简介

  • Feign 是一个声明式的 HTTP 客户端,它的目的就是让远程调用更加简单。
  • Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息了
  • Feign 整合了 Ribbon(负载均衡)和 Hystrix(服务熔断),可以让我们不再需要显式地使用这两个组件
  • SpringCloudFeign 在 NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了 SpringCloudRibbon 自行封装服务调用客户端的开发量

使用

  • 假设有两个服务,gulimall-coupon、gulimall-member

引入依赖

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

在 gulimall-coupon 服务的控制层编写以下要调用的接口(gulimall-member 调用 gulimall-coupon)

@RestController
@RequestMapping("coupon/coupon")
public class CouponController {

    @RequestMapping("/member/list")
    public R membercoupons() {
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        return R.ok().put("coupons", Arrays.asList(couponEntity));
    }

}

申明远程接口(在 gulimall-member 服务,新建feign包,专门存放要远程调用的方法)

/**
* gulimall-coupon 为注册进注册中心的服务名
**/
@FeignClient("gulimall-coupon")
public interface CouponFeignService {

    /**
     * 此方法复制 gulimall-coupon 服务要调用的接口
     * 要保证方法以及调用的接口一致
     * @return
     */
    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();

}

配置 @EnableFeignClients 注解,开启 feign 功能

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.ydj.gulimall.member.feign")
public class GulimallMemberApplication {

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

}

最后在 gulimall-member 服务的控制层编写以下代码完成服务的调用

@RestController
@RequestMapping("member/member")
public class MemberController {

    @Autowired
    CouponFeignService couponFeignService;

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

        R membercoupons = couponFeignService.membercoupons();
        return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
    }
}

此时调用 gulimall-member 便可访问 gulimall-coupon的接口

posted @   小羊abc  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示