服务调用/通信-OpenFeign最佳实践

Spring Cloud OpenFeign 它是 Spring 官方推出的一种声明式服务调用与负载均衡组件。它底层基于 Netflix Feign,Netflix Feign 是 Netflix 设计的开源的声明式 WebService 客户端,用于简化服务间通信。

Spring Cloud openfeign 对 Feign 进行了增强,使其支持 Spring MVC 注解,另外还整合了 Ribbon 和 Nacos,从而使得 Feign 的使用更加方便。

docs.spring.io/spring-clou…

原理

用到了动态代理

对比 Dubbo

OpenFeign 好像不能直接调用 service 层,一般的写法是服务提供方必须写 controller 接口,而 dubbo 是不用写 controller 接口的。如果不能直接调用 service 层,必须写 controller 层,那么这应该是一个缺点,因为每次都额外要写一个 controller 方法。

而且在服务消费者方,还要额外写个有@FeignClient注解的远程调用 service 接口。看上去 Spring Cloud 的OpenFeigndubbo麻烦不少。

引入依赖

使用 OpenFeign 组件需要引入客户端依赖

<!--OpenFeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
复制代码

使用案例

在启动类上加上@EnableFeignClients注解

/**
 * 被调用方
 */
@RestController
public class WarehouseController {
    /**
     * 查询对应 skuId 的库存状况
     * @param skuId skuId
     * @return Stock 库存对象
     */
    @GetMapping("/stock")
    public Stock getStock(Long skuId){
    	// ...省略
    }
}

/**
 * 调用方
 */
@FeignClient("warehouse-service")
public interface WarehouseServiceFeignClient {
    
    @GetMapping("/stock")
    public Stock getStock(@RequestParam("skuId") Long skuId);
}
复制代码

@FeignClient 注解说明当前接口为 OpenFeign 通信客户端,参数值 warehouse-service 为服务提供者 ID(注意,OpenFeign服务名称不支持下划线_,这是一个坑),这一项必须与 Nacos 注册 ID 保持一致。

在 OpenFeign 发送请求前会自动在 Nacos 查询 warehouse-service 所有可用实例信息,再通过内置的 Ribbon 负载均衡选择一个实例发起 RESTful 请求,进而保证通信高可用。

tips: 这里的返回值虽然写的都是同一个类型,但他们可不一定是同一个类,本质上是以 Json 交互的,只要属性对的上即可。

@FeignClient 注解属性详解

contextId: 如果配置了contextId,该值将会作为beanName。

fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口

fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码

url: url一般用于调试,可以手动指定@FeignClient调用的地址

Spring Cloud CircuitBreaker Fallbacks

当断路器打开或出现错误时执行的默认逻辑,可以通过fallba

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值