千家信息网

如何解析SpringCloud @FeignClient参数的用法

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇文章为大家展示了如何解析SpringCloud @FeignClient参数的用法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SpringCloud @
千家信息网最后更新 2025年02月01日如何解析SpringCloud @FeignClient参数的用法

本篇文章为大家展示了如何解析SpringCloud @FeignClient参数的用法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

SpringCloud @FeignClient 参数详解

今天因为工作中遇到FeignClient一个奇葩的bug,后面仔细研究了,找出了原因,那么刚好对FeignClient 这个注解总结一下:

先看@FeignClient 源码:源码如下,本文最后面。

11个方法,常用方法说明如下

@FeignClient(name = "service-name", url = "${feign.urls.service-name:}", fallback =ApiFallBack.class,configuration = Interceptor.class)
  • 1.value,name 这两个就同一个意思:对应的是调用的微服务的服务名,对用服务发现、走网关调用,这个很关键。

  • 2.url 这是访问地址,可以直接提供给外部调用,也可以直接写如192.168.1.11:8800/applicationName

  • 3.fallbackfallbackFactory

就给@FeignClient注解设置fallback属性,并且回退类要继承@FeignClient所注解的接口

ApiFallBack类拿出去单独作为一个类的话,我们就得在该类上添加注解@Component

如果fallback默认优先级比fallfactory优先级高。所以二者都存在的话,会访问fallback的回退方法。

这里不做演示。

那么fallback和fallfactory有什么区别呢

@FeignClient(name = "service-name", fallbackFactory = HystrixClientFallbackFactory.class)protected interface HystrixClient {@RequestMapping(method = RequestMethod.GET, value = "/test")           Hello iFailSometimes(); }@Componentstatic class HystrixClientFallbackFactory implements FallbackFactory {@Overridepublic HystrixClient create(Throwable cause) {return new HystrixClientWithFallBackFactory() {@Overridepublic Hello iFailSometimes() {return new Hello("fallback; reason was: " + cause.getMessage());}};}}

fallback和fallfactory区别

  • fallback 只是重写了回退方法。

  • fallfactory 层面比较深,因为它用线程抛出了异常,可以看到底层具体问题。

/** * Annotation for interfaces declaring that a REST client with that interface should be * created (e.g. for autowiring into another component). If ribbon is available it will be * used to load balance the backend requests, and the load balancer can be configured * using a @RibbonClient with the same name (i.e. value) as the feign client. * * @author Spencer Gibb * @author Venil Noronha */@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface FeignClient {    /**    * The name of the service with optional protocol prefix. Synonym for {@link #name()    * name}. A name must be specified for all clients, whether or not a url is provided.    * Can be specified as property key, eg: ${propertyKey}.    */   @AliasFor("name")   String value() default "";    /**    * The service id with optional protocol prefix. Synonym for {@link #value() value}.    *    * @deprecated use {@link #name() name} instead    */   @Deprecated   String serviceId() default "";    /**    * The service id with optional protocol prefix. Synonym for {@link #value() value}.    */   @AliasFor("value")   String name() default "";      /**    * Sets the @Qualifier value for the feign client.    */   String qualifier() default "";    /**    * An absolute URL or resolvable hostname (the protocol is optional).    */   String url() default "";    /**    * Whether 404s should be decoded instead of throwing FeignExceptions    */   boolean decode404() default false;    /**    * A custom @Configuration for the feign client. Can contain override    * @Bean definition for the pieces that make up the client, for instance    * {@link feign.codec.Decoder}, {@link feign.codec.Encoder}, {@link feign.Contract}.    *    * @see FeignClientsConfiguration for the defaults    */   Class[] configuration() default {};    /**    * Fallback class for the specified Feign client interface. The fallback class must    * implement the interface annotated by this annotation and be a valid spring bean.    */   Class fallback() default void.class;    /**    * Define a fallback factory for the specified Feign client interface. The fallback    * factory must produce instances of fallback classes that implement the interface    * annotated by {@link FeignClient}. The fallback factory must be a valid spring    * bean.    *    * @see feign.hystrix.FallbackFactory for details.    */   Class fallbackFactory() default void.class;    /**    * Path prefix to be used by all method-level mappings. Can be used with or without    * @RibbonClient.    */   String path() default "";    /**    * Whether to mark the feign proxy as a primary bean. Defaults to true.    */   boolean primary() default true; }

@FeignClient 注解常用参数

怕以后又忘记,总结下目前项目中实际用到的 @FeignClient 注解中的参数,如下:

@FeignClient(value = "annoroad-alpha",  url = "${annoroad.ms.annoroad-alpha.url}")public interface UserFacade {    @PostMapping(value = "/user/detail")    UserDto detail(@RequestParam("id") long id);}

value

  • value 等同于 name

url

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

上述内容就是如何解析SpringCloud @FeignClient参数的用法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0