骆驼服务未按预期解析主机和端口
Camel servicall not resolving host and port as expected
您好,我是使用 camel 的新手..我在这里遇到两个问题:
1) 我在一条骆驼路线中实现了 2 个 serviceCalls。我对 serviceCall 的理解是,它将解析给定的 VIP 的主机和端口(我正在尝试为我的 AWS 实例解析 Eureka VIP),结果设置为 headers CamelServiceCallServiceHost 和 CamelServiceCallServicePort。
我的路线如下所示:
from(fromUri).routeId("routeid").description(
"This route takes SQS message")
.unmarshal()
.json(JsonLibrary.Jackson, SQSMessage.class).process(sqsMessageProcessor)
.setHeader(Exchange.HTTP_METHOD,
constant(org.apache.camel.component.http4.HttpMethods.GET))
// 1st Service call
.setBody().constant(null).setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.hystrix().hystrixConfiguration().executionTimeoutInMilliseconds(hystrixTimeout).end()
.serviceCall().name("the Eureka VIP of the 1st call").expression()
.simple("http4:${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}"
+ "< -- the path and parameters for the call goes here --->")
.end()
.unmarshal().json(JsonLibrary.Jackson, ResponseClass1.class)
.process(FirstServiceCallProcessor)
// 2nd Service call
.setBody().constant(null)
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.serviceCall().name("the Eureka VIP of the 2nd call").expression()
.simple("http4:${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}"
+ "< -- the path and parameters for the call goes here --->")
.end()
.unmarshal().json(JsonLibrary.Jackson, ResponseClass2.class)
.process(SecondServiceCallProcessor)
我的问题是,我的第一次服务呼叫工作正常,并且得到了预期的响应。但是在执行第二个服务调用时,我发现解析的主机和端口与之前的服务调用相同。我的理解是,第二个 serviceCall 没有成功执行,headers 取自第一个服务调用中设置的值。
为什么会这样。
如果有人可以提供一些关于 serviceCall 如何解析主机和端口的见解,我也很高兴。
2) 我还在我的路由中实现了 hystrix(如您在代码中所见)。我注意到的是,当我使用 hystrix 时,如果此后路由中的任何地方出现错误或失败,我都不会收到任何异常日志。为什么没有记录异常。通过删除 hystrix 实现,我知道第二次服务调用无法正常工作。只有在那之后我才能看到抛出异常的日志。
我们最近发现了这个问题。
在执行第二次服务调用之前,您必须删除 camel 服务调用设置的 headers。这些可以在界面中找到'ServiceCallConstants'
以下示例显示如何删除所有与服务调用相关的 headers。这应该在第二次服务调用之前完成:
from("routeId").removeHeaders("CamelServiceCall*").end();
您好,我是使用 camel 的新手..我在这里遇到两个问题:
1) 我在一条骆驼路线中实现了 2 个 serviceCalls。我对 serviceCall 的理解是,它将解析给定的 VIP 的主机和端口(我正在尝试为我的 AWS 实例解析 Eureka VIP),结果设置为 headers CamelServiceCallServiceHost 和 CamelServiceCallServicePort。
我的路线如下所示:
from(fromUri).routeId("routeid").description(
"This route takes SQS message")
.unmarshal()
.json(JsonLibrary.Jackson, SQSMessage.class).process(sqsMessageProcessor)
.setHeader(Exchange.HTTP_METHOD,
constant(org.apache.camel.component.http4.HttpMethods.GET))
// 1st Service call
.setBody().constant(null).setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.hystrix().hystrixConfiguration().executionTimeoutInMilliseconds(hystrixTimeout).end()
.serviceCall().name("the Eureka VIP of the 1st call").expression()
.simple("http4:${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}"
+ "< -- the path and parameters for the call goes here --->")
.end()
.unmarshal().json(JsonLibrary.Jackson, ResponseClass1.class)
.process(FirstServiceCallProcessor)
// 2nd Service call
.setBody().constant(null)
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.serviceCall().name("the Eureka VIP of the 2nd call").expression()
.simple("http4:${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}"
+ "< -- the path and parameters for the call goes here --->")
.end()
.unmarshal().json(JsonLibrary.Jackson, ResponseClass2.class)
.process(SecondServiceCallProcessor)
我的问题是,我的第一次服务呼叫工作正常,并且得到了预期的响应。但是在执行第二个服务调用时,我发现解析的主机和端口与之前的服务调用相同。我的理解是,第二个 serviceCall 没有成功执行,headers 取自第一个服务调用中设置的值。
为什么会这样。
如果有人可以提供一些关于 serviceCall 如何解析主机和端口的见解,我也很高兴。
2) 我还在我的路由中实现了 hystrix(如您在代码中所见)。我注意到的是,当我使用 hystrix 时,如果此后路由中的任何地方出现错误或失败,我都不会收到任何异常日志。为什么没有记录异常。通过删除 hystrix 实现,我知道第二次服务调用无法正常工作。只有在那之后我才能看到抛出异常的日志。
我们最近发现了这个问题。
在执行第二次服务调用之前,您必须删除 camel 服务调用设置的 headers。这些可以在界面中找到'ServiceCallConstants'
以下示例显示如何删除所有与服务调用相关的 headers。这应该在第二次服务调用之前完成:
from("routeId").removeHeaders("CamelServiceCall*").end();