Feign使用OKHttp进行调用报错

Blade 未结 1 1031
zkf
zkf 剑者 2020-07-28 09:35

一、该问题的重现步骤是什么?

1. 我尝试着使用Feign的Okhttp进行服务调用,但是项目启动失败!


二、你期待的结果是什么?实际看到的又是什么?

我希望能够调用Feign的时候能够使用Okhttp去建立服务连接。


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

我正在使用BladeX的

2.5.0.RELEASE

系统:win10


四、请提供详细的错误堆栈信息,这很重要。

2020-07-28 09:28:28.434  INFO 16292 --- [           main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [CloudFoundryRouteService]

2020-07-28 09:28:28.683  WARN 16292 --- [           main] onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'gatewayLegacyControllerEndpoint' defined in class path resource [org/springframework/cloud/gateway/config/GatewayAutoConfiguration$GatewayActuatorConfiguration.class]: Unsatisfied dependency expressed through method 'gatewayLegacyControllerEndpoint' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scopedTarget.aiwenTokenFilter': Unsatisfied dependency expressed through field 'tokenClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springblade.token.feign.TokenClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No fallback instance of type class org.springblade.token.feign.TokenClientFallBack found for feign client aiwen-token

2020-07-28 09:28:28.795  INFO 16292 --- [           main] ConditionEvaluationReportLoggingListener : 


Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

2020-07-28 09:28:28.825 ERROR 16292 --- [           main] o.s.boot.SpringApplication               : Application run failed


org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'gatewayLegacyControllerEndpoint' defined in class path resource [org/springframework/cloud/gateway/config/GatewayAutoConfiguration$GatewayActuatorConfiguration.class]: Unsatisfied dependency expressed through method 'gatewayLegacyControllerEndpoint' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scopedTarget.aiwenTokenFilter': Unsatisfied dependency expressed through field 'tokenClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springblade.token.feign.TokenClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No fallback instance of type class org.springblade.token.feign.TokenClientFallBack found for feign client aiwen-token

at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1320) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1159) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:847) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[spring-context-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) ~[spring-boot-2.1.13.RELEASE.jar:2.1.13.RELEASE]

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) ~[spring-boot-2.1.13.RELEASE.jar:2.1.13.RELEASE]

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) ~[spring-boot-2.1.13.RELEASE.jar:2.1.13.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-2.1.13.RELEASE.jar:2.1.13.RELEASE]

at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140) [spring-boot-2.1.13.RELEASE.jar:2.1.13.RELEASE]

at org.springblade.core.launch.BladeApplication.run(BladeApplication.java:49) [blade-core-launch-2.5.0.RELEASE.jar:na]

at org.springblade.gateway.GateWayApplication.main(GateWayApplication.java:41) [classes/:na]

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scopedTarget.aiwenTokenFilter': Unsatisfied dependency expressed through field 'tokenClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springblade.token.feign.TokenClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No fallback instance of type class org.springblade.token.feign.TokenClientFallBack found for feign client aiwen-token

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:598) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:376) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1404) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$1(AbstractBeanFactory.java:356) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:389) ~[spring-cloud-context-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:186) ~[spring-cloud-context-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:353) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35) ~[spring-aop-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) ~[spring-aop-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springblade.gateway.filter.AiwenTokenFilter$$EnhancerBySpringCGLIB$$9b5c3c2f.getOrder(<generated>) ~[classes/:na]

at org.springframework.core.OrderComparator.findOrder(OrderComparator.java:141) ~[spring-core-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.core.annotation.AnnotationAwareOrderComparator.findOrder(AnnotationAwareOrderComparator.java:65) ~[spring-core-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:124) ~[spring-core-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:112) ~[spring-core-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.core.OrderComparator.doCompare(OrderComparator.java:82) ~[spring-core-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.core.OrderComparator.lambda$withSourceProvider$0(OrderComparator.java:63) ~[spring-core-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:1.8.0_121]

at java.util.TimSort.sort(TimSort.java:220) ~[na:1.8.0_121]

at java.util.Arrays.sort(Arrays.java:1512) ~[na:1.8.0_121]

at java.util.ArrayList.sort(ArrayList.java:1454) ~[na:1.8.0_121]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1339) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1213) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1175) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

... 19 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springblade.token.feign.TokenClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No fallback instance of type class org.springblade.token.feign.TokenClientFallBack found for feign client aiwen-token

at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1674) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1248) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1478) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1435) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1218) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1175) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:595) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

... 47 common frames omitted

Caused by: java.lang.IllegalStateException: No fallback instance of type class org.springblade.token.feign.TokenClientFallBack found for feign client aiwen-token

at org.springframework.cloud.openfeign.HystrixTargeter.getFromContext(HystrixTargeter.java:81) ~[spring-cloud-openfeign-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.cloud.openfeign.HystrixTargeter.targetWithFallback(HystrixTargeter.java:72) ~[spring-cloud-openfeign-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.cloud.openfeign.HystrixTargeter.target(HystrixTargeter.java:49) ~[spring-cloud-openfeign-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:238) ~[spring-cloud-openfeign-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:267) ~[spring-cloud-openfeign-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:247) ~[spring-cloud-openfeign-core-2.1.5.RELEASE.jar:2.1.5.RELEASE]

at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171) ~[spring-beans-5.1.14.RELEASE.jar:5.1.14.RELEASE]

... 58 common frames omitted


五、若有更多详细信息,请在下面提供。

1、配置方式:yaml配置

image.png

2、引入配置类FeignConfig

(Feign.)
(FeignAutoConfiguration.)
FeignConfig {
Contract feignContract() {
      feign.Contract.Default();
   }


   ({Client.})
   Client feignClient(okhttp3.OkHttpClient client) {
      feign.okhttp.OkHttpClient(client);
   }

   ({ConnectionPool.})
   ConnectionPool httpClientConnectionPool(FeignHttpClientProperties httpClientProperties, OkHttpClientConnectionPoolFactory connectionPoolFactory) {
      Integer maxTotalConnections = httpClientProperties.getMaxConnections();
      Long timeToLive = httpClientProperties.getTimeToLive();
      TimeUnit ttlUnit = httpClientProperties.getTimeToLiveUnit();
      connectionPoolFactory.create(maxTotalConnections, timeToLive, ttlUnit);
   }

   OkHttpClient client(OkHttpClientFactory httpClientFactory, ConnectionPool connectionPool, FeignHttpClientProperties httpClientProperties) {
      Boolean followRedirects = httpClientProperties.isFollowRedirects();
      Integer connectTimeout = httpClientProperties.getConnectionTimeout();
      Boolean disableSslValidation = httpClientProperties.isDisableSslValidation();
      httpClientFactory.createBuilder(disableSslValidation)
         .connectTimeout(()connectTimeout, TimeUnit.)
         .followRedirects(followRedirects)
         .connectionPool(connectionPool)
         .addInterceptor(OkHttpLogInterceptor()) .build();
   }
}

3、引入日志拦截器

OkHttpLogInterceptor Interceptor {


   Response intercept(Interceptor.Chain chain) IOException {
      Request request = chain.request();

      t1 = System.();.info(String.(,
         request.url(), chain.connection(), request.headers()));

      Response response = chain.proceed(request);

      t2 = System.();ResponseBody responseBody = response.peekBody(* );

      .info(String.(,
         response.request().url(),
         responseBody.string(),
         (t2 - t1) / ,
         response.headers()));

      response;
   }
}
5、引入okhttp依赖
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
    <version>10.2.0</version>
</dependency>
1条回答
提交回复