一 FeignClient注解
@FeignClient标签的常用属性如下:@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FeignClient { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; /** 从源码可以得知,name是value的别名,value也是name的别名。两者的作用是一致的,name指定FeignClient的名称,如果项 目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。 */
value: 服务名
name:指定FeignClient的名称,注意—》如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
url: url一般用于调试,可以手动指定@FeignClient调用的地址
fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path: 定义当前FeignClient的统一前缀
contextId:比如我们有个order服务,但order服务中有很多个接口,我们不想将所有的调用接口都定义在一个类中
/** *《接口A》 */ @Component @FeignClient(name = "order", fallback = OrderFeignHystrix.class, contextId = "orderFeignA",path = "/order") public interface OrderFeignA { /** * 保存订单信息 * * @param orderInfoDTO * @return */ @PostMapping("/create") ResponseMessage createOrder(@RequestBody @Valid OrderInfoDTO orderInfoDTO); /** *《接口B》 */ @Component @FeignClient(name = "order", fallback = OrderFeignHystrix.class, contextId = "orderFeignB",path = "/order") public interface OrderFeignB { /** * 保存订单信息 * * @param orderInfoDTO * @return */ @PostMapping("/create") ResponseMessage createOrder(@RequestBody @Valid OrderInfoDTO orderInfoDTO);