我正在使用Camel serviceCall调用我的Eureka VIP。主机和端口按预期解析。但响应为400并抛出错误。我的serviceCall看起来像下面的内容:
from("direct:servicecall")
.setBody().constant(null)
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.serviceCall().name("eureka_vip_name")
.expression()
.simple("http4:${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}"
+ "service call path and parameters")
.end()
字符集
添加错误日志:
org. apache. camel. http. common. HttpOperationFailedException:HTTP操作调用http://172.31.20.241:8080/失败,状态代码:<------url path and parameteres------>400 at org.apache.camel.component.http4.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:312)~[camel-http4 - 2.20.1.jar!/:2.20.1] at org.apache.camel.component.http4.HttpProducer.process(HttpProducer.java:207)~[camel-http4 - 2.20.1.jar!/:2.20.1] at org. apache. camel. util. AsyncProcessorConverterHelper $ProcessorToAsyncProcessorBridge. process(AsyncProcessorConverterHelper.java:61)~[camel-core-2.20.1.jar!/:2.20.1] at org.apache.camel.processor.SendDynamicProcessor$1.doInAsyncProducer(SendDynamicProcessor.java:132)~[camel-core-2.20.1.jar!/:2.20.1] at org. apache. camel. impl. ProducerCache. doInAsyncProducer(ProducerCache.java:445)~[camel-core-2.20.1.jar!/:2.20.1] at org. apache. camel. processor. SendDynamicProcessor. process(SendDynamicProcessor.java:127)~[camel-core-2.20.1.jar!/:2.20.1] at org. apache. camel. impl. cloud. DefaultServiceCallProcessor. execute(DefaultServiceCallProcessor.java:184)~[camel-core-2.20.1.jar!/:2.20.1] at org.apache.camel.impl.cloud.DefaultServiceCallProcessor.judda$process$0(DefaultServiceCallProcessor.java:164)~[camel-core-2.20.1.jar!/:2.20.1]在org.apache.camel.spring.cloud.CamelSpringCloudServiceLoadBalancer.juda$process$0(CamelSpringCloudServiceLoadBalancer.java:66)~[camel-spring-cloud-2.20.1.jar!/:2.20.1] at org. springframework. cloud. networks. ribbon. RibbonLoadBalancerClient. execute(RibbonLoadBalancerClient.java:98)~[spring-cloud-netflix-core-1.3.4.RELEASE.jar!/:1.3.4.RELEASE] at org. springframework. cloud. netflix.ribbon. RibbonLoadBalancerClient. execute(RibbonLoadBalancerClient.java:80)~[spring-cloud-netflix-core-1.3.4.RELEASE.jar!/:1.3.4.RELEASE] at org. apache. camel. spring. cloud. CamelSpringCloudServiceLoadBalancer. process(CamelSpringCloudServiceLoadBalancer.java:66)~[camel-spring-cloud-2.20.1.jar!/:2.20.1] at org. apache. camel. impl. cloud. DefaultServiceCallProcessor. process(DefaultServiceCallProcessor.java:164)~[camel-core-2.20.1.jar!/:2.20.1] at org. apache. camel. management. InstrumentationProcessor. process(InstrumentationProcessor.java:[camel-core-2.20.1.jar!/:2.20.1]在org. apache. camel. processor. RediveryErrorHandler $www.example.com(RediveryErrorHandler.java:203)~[camel-core-2.20.1.jar!/:2.20.1] at org. apache. camel. processor. RediveryErrorHandler.java:171)~[camel-core-2.20.1.jar!/:2.20.1] at www.example.com(FutureTask.java:266)~[?:1.8.0_161]在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:1.8.0)~[?:1.8.0_161]在java. util. concurrent. ScheduledThreadPoolExecutor $ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)~[?:1.8.0_161]在java. util. concurrent. ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:AsyncRedeliveryTask.call:1.8.0_161]在java. util. concurrent. ThreadPoolExecutor $www.example.com(ThreadPoolExecutor.java:624)[?:1.8.0_161]在www.example.com(Thread.java:748)[?:1.8.0_161]
我试着从postMan(Chrome扩展)中点击相同的URL:当从postMan中点击时,我使用ec2示例DNS名称作为主机,它给了我预期的响应,即200 OK,预期的正文作为结果。
1条答案
按热度按时间h6my8fg21#
试图回答这个问题的事件,如果它是写在很久以前。
我遇到了同样的问题,我注意到这是由于一些额外的头部,设置在父/以前的路由。
例如,如果您在父路由中设置了一个过长或不同格式的报头(即byte[]),则此报头也会发送到http请求,并产生Http 400错误代码。
在执行http请求之前,我已经通过使用**.removeHeaders(“*”)**删除所有头部来解决:
字符集
我希望这对别人有用!