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"));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南