【问题标题】:Camel servicall not resolving host and port as expected骆驼服务没有按预期解析主机和端口
【发布时间】:2018-09-03 01:06:51
【问题描述】:

您好,我是骆驼新手。我在这里遇到两个问题:

1) 我在一条骆驼路线中实现了 2 个服务调用。我对 serviceCall 的理解是它将解析给定的 VIP 的主机和端口(我正在尝试为我的 AWS 实例解析 Eureka 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 实现,我知道第二个服务调用无法正常工作。只有在那之后我才能看到抛出异常的日志。

【问题讨论】:

  • 你使用什么版本的骆驼?我认为我们有一个关于在 serviceCall EIP 上使用表达式的错误,最近才在最新版本之一中修复
  • 我使用的是 2.20.1 版本

标签: java apache-camel hystrix


【解决方案1】:

我们最近发现了这个问题。

在进行第二次服务调用之前,您必须删除骆驼服务调用设置的标头。这些可以在接口'ServiceCallConstants'中找到

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

from("routeId").removeHeaders("CamelServiceCall*").end();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多