Camel servicall未按预期解析主机和端口

时间:2018-03-24 13:21:58

标签: java apache-camel hystrix

您好我是使用camel的新手..我在这里遇到两个问题:

1)我在一条骆驼路线上实施了2个serviceCalls。我对serviceCall的理解是,它将解析VIP的主机和端口(我正在尝试解析我的AWS实例的E​​ureka VIP),并将结果设置为头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没有成功执行,标题来自第一个服务调用中设置的值。

为什么会这样。

如果有人能够提供有关serviceCall如何解析主机和端口的一些见解,我也会很高兴。

2)我也在我的路线中实现了hystrix(正如你在代码中看到的那样)。我注意到的是,当我使用hystrix时,如果之后路径中的任何地方出现错误或故障,我不会收到任何异常日志。为什么不记录异常。通过删除hystrix实现,我知道第二个服务调用无法正常工作。只有在那之后才能看到抛出异常的日志。

1 个答案:

答案 0 :(得分:0)

我们最近发现了问题。

在进行第二次服务呼叫之前,您必须删除由骆驼服务呼叫设置的标头。这些可以在“ ServiceCallConstants”界面中找到

以下示例显示如何删除与服务调用相关的所有标头。这应该在进行第二次服务调用之前完成:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<div id="divNumbers">
    <p>One</p> <p>Two</p> <p>Three</p><p>Four</p> <p>Five</p>
</div> 
<button type="button" id="btnNumberPs">Toggle Numbers</button>