之前一直在windows上开发,feignClinet写都是按照接口服务的controller那边写的,controller那边用的是postMapping,所以我当时就直接复制到feignClinet的接口上了,在windows上开发调试都没问题,但当部署到测试的linux环境后,奶奶的,一直报错,错误如下:
java.lang.RuntimeException: com.netflix.client.ClientException
at org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:71)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:97)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
at com.sun.proxy.$Proxy113.addLog(Unknown Source)
at com.skyroam.bsp.security4.gateway.log.LogHandler.run(LogHandler.java:64)
Caused by: com.netflix.client.ClientException
at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:123)
at org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:63)
... 5 more
Caused by: java.lang.NullPointerException
at com.netflix.loadbalancer.LoadBalancerContext.reconstructURIWithServer(LoadBalancerContext.java:575)
at org.springframework.cloud.netflix.feign.ribbon.FeignLoadBalancer.reconstructURIWithServer(FeignLoadBalancer.java:105)
at org.springframework.cloud.netflix.feign.ribbon.RetryableFeignLoadBalancer$1.doWithRetry(RetryableFeignLoadBalancer.java:86)
at org.springframework.cloud.netflix.feign.ribbon.RetryableFeignLoadBalancer$1.doWithRetry(RetryableFeignLoadBalancer.java:77)
at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:286)
at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:163)
at org.springframework.cloud.netflix.feign.ribbon.RetryableFeignLoadBalancer.execute(RetryableFeignLoadBalancer.java:77)
at org.springframework.cloud.netflix.feign.ribbon.RetryableFeignLoadBalancer.execute(RetryableFeignLoadBalancer.java:48)
at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:109)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287)
at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231)
at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228)
at rx.Observable.unsafeSubscribe(Observable.java:10211)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180)
at rx.Observable.unsafeSubscribe(Observable.java:10211)
at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)
at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)
at rx.Observable.unsafeSubscribe(Observable.java:10211)
at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127)
at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73)
at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)
at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79)
at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45)
at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276)
at rx.Subscriber.setProducer(Subscriber.java:209)
at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138)
at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.subscribe(Observable.java:10307)
at rx.Observable.subscribe(Observable.java:10274)
at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:445)
at rx.observables.BlockingObservable.single(BlockingObservable.java:342)
at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:117)
... 6 more
具体是com.netflix.loadbalancer.LoadBalancerContext.reconstructURIWithServer(LoadBalancerContext.java:575) 这里报了空指针,查了源码,且进行了debug,发现这里调了两次,第一次没问题,再进来一次发现575行的host竟然变为空了,这个是在linux的,在windows环境却不为空,能正常通过。
后来听一个同事说,feignClient不能使用PostMapping,GetMapping这些东西,只能用RequestMapping,索性我就改成RequestMapping试了下,麻蛋,竟然好了
没具体看源码,有空再研究研究
分享到:
相关推荐
Feign默认不支持MultipartFile,因此在尝试传递文件时可能会出现异常。 解决这个问题的一种方法是扩展Feign的默认配置,添加对MultipartFile的支持。我们可以通过自定义`FeignClient`配置类来实现。例如,创建一个`...
2. **插件支持**:Feign支持多种插件,如Hystrix(用于服务降级和熔断)、Ribbon(负载均衡器)以及Zuul(API网关)。这些插件可以无缝集成到Feign中,为微服务架构提供更强大的功能。 3. **模板化调用**:Feign...
在"Feign对Hystrix的支持-代码部分"的项目中,我们可以看到以下几个关键的知识点: 1. **Feign的基本使用**:Feign通过接口定义了服务调用的方式,使用注解来指定HTTP请求的方法、URL、参数等信息。开发者只需要...
除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了对SpringMVC注解的支持,同时为了能够使用和Spring Web中默认使用的相同的httpMessageConverter,SpringCloud集成了Ribbon和Eureka,用来在...
- Feign支持插件系统,可以通过实现`feign.codec.Decoder`和`feign.codec.Encoder`接口来自定义编码和解码逻辑。 - 也可以通过实现`feign.Contract`接口来自定义接口方法到HTTP请求的映射规则。 总结来说,"feign...
综上所述,Spring Cloud Feign是构建分布式系统中不可或缺的一部分,它与Ribbon和Eureka的协作,为微服务架构提供了便捷、高效的服务调用方式,极大地简化了服务间的通信复杂性。在实际项目中,合理利用这些组件,...
Feign默认支持JSON格式的数据传输,但在这里,我们需要扩展其功能,使其支持XML。这就涉及到了Jackson库,Jackson是Java中广泛使用的JSON处理库,但它也可以处理XML。为了将Java对象转换为XML,我们需要引入`jackson...
2. **注解支持**:Feign支持使用Feign自身定义的注解以及JAX-RS的注解,这为开发者提供了灵活性。 3. **插件式架构**:Feign支持插件式编码器和解码器,这意味着用户可以根据需求选择合适的编解码器处理HTTP消息。 4...
【SpringCloud之Feign】是Spring Cloud生态体系中一个重要的组件,主要用于服务间的调用,实现了声明式的服务调用,极大地简化了微服务之间的通信。Feign基于Netflix Hystrix进行了整合,支持服务熔断,提高了系统的...
spring cloud feign不支持@RequestBody+ RequestMethod.GET报错的解决方法 spring cloud feign是一种基于HTTP的服务调用方式,而在使用spring cloud feign时,我们可能会遇到不支持@RequestBody+ RequestMethod.GET...
Feign + Spring Boot 的使用 Feign 是一个声明式的 Web 服务客户端,它可以使得 Web 服务客户端的写入更加方便。Feign 结合 Eureka 注册中心,把不同的服务项目注册到 Eureka 中,通过 Feign 客户端进行调用,可以...
### Spring Boot与Feign:微服务架构下的优雅通信 #### 一、前言 ...Feign的强大之处不仅在于其本身的简洁性,还在于其与Spring Cloud生态系统的紧密集成,使得开发人员能够快速构建出健壮且灵活的分布式系统。
Redis作者说到:“灵活性被过分高估–>约束才是解放”。...其实核心模块可以独立的work,但是不免它的能力偏弱,比如只能编码字符串类型、只能解码字符串类型,默认使用java.net.HttpURLConnection作为HC… 本篇将
赠送jar包:feign-core-10.12.jar; 赠送原API文档:feign-core-10.12-javadoc.jar; 赠送源代码:feign-core-10.12-sources.jar; 赠送Maven依赖信息文件:feign-core-10.12.pom; 包含翻译后的API文档:feign-core...
Spring Cloud Feign 是 Spring Cloud 中的一个子项目,提供了对 Feign 的支持。它使得开发者可以使用 Spring Boot 应用程序来调用远程服务,提供了一种简单、可靠的方式来实现微服务之间的调用。 实践案例 我们的...
另外,Feign还支持Hystrix断路器,可以在服务不可用时提供保护,避免服务雪崩。 这个"Feigndemo02"可能包含了实现以上功能的示例代码,包括服务提供者和服务消费者端的配置、接口定义以及实际调用。通过分析这些...
- **OpenFeign**:Spring Cloud 对 Feign 进行了封装,增加了更多的功能,如支持 Spring MVC 风格的注解,以及支持 Spring Cloud Config。 6. **示例代码** ```java @FeignClient(name = "service-provider") ...
Feign是Spring Cloud框架中的一个组件,用于实现声明式的REST客户端。它允许开发者定义接口,然后Feign会根据这些接口自动生成实现,使得调用远程服务就像调用本地方法一样简单。然而,在某些情况下,当两个Feign...
赠送jar包:feign-form-3.8.0.jar; 赠送原API文档:feign-form-3.8.0-javadoc.jar; 赠送源代码:feign-form-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-3.8.0.pom; 包含翻译后的API文档:feign-form...
Spring Cloud Feign是Spring Cloud生态系统中的一个组件,它作为一个声明式的服务调用客户端,使得编写Web服务客户端变得简单。Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得...