【问题标题】:http4 not setting HTTP_RESPONSE propertieshttp4 未设置 HTTP_RESPONSE 属性
【发布时间】:2017-08-17 21:19:08
【问题描述】:

我有一个非常简单的路由,它获取一个 URL 并使用 Camel HTTP4 组件打印内容:

from("timer://foo?fixedRate=true&delay=0&period=10000")
    .to("http4://www.google.com")
    .process(e -> System.out.println("Out body: " + e.getOut().getBody()));

请注意,我使用的是 out.body,因为正如 Camel documentation 中所述:

Camel 会将来自外部服务器的 HTTP 响应存储在 OUT 上 身体。 IN 消息中的所有标头都将复制到 OUT 消息,因此在路由期间会保留标头。

但我从 OUT (正文和标题)获得空值。仅在 IN 消息中填写所有内容。

我错过了什么还是一个错误?

【问题讨论】:

    标签: apache-camel camel-http


    【解决方案1】:

    在 Camel 中,路由由节点组成。每个节点都接受交易所。 Exchange 有一条 IN 和 OUT 消息。因此,在您的情况下,带有 http4 组件的节点采用了名为 google.com 的 Exchange,并将正文和标头写入 OUT 消息。接下来,节点与您的处理器进行交换。现在 IN 消息具有来自前一个节点(http4)的响应,但是您正在打印 OUT 是空的!所以 IN 和 OUT 消息是每个节点而不是每个路由!

    【讨论】:

      【解决方案2】:

      您无需先设置就从处理器获取 Out 主体。这就是你得到 null 的原因。要完成这项工作,您首先需要将传入的消息、标题和附件显式复制到 Out Body,然后打印出来。或者更轻松地接收您提到的 In 消息。

      下一部分来自“骆驼行动”这本书,这是一本很棒的书,我认为它很有帮助。

      在实践中,使用 getOut 时有一个常见的陷阱:传入的 邮件标题和附件将丢失。这通常不是什么 你想要,所以你必须从 传入消息到传出消息,这可能很乏味。

      【讨论】:

      • 我了解,如果我正在处理输入消息,则默认情况下 OUT 将为空。但是 HTTP4 组件明确声明 IN 消息将被复制到 OUT 消息(正文/标题)。使用 HTTP4 发送消息后,OUT 不应该可用吗?如果不是,说明文档具有误导性,您同意吗?
      • 在 Camel 中,路由由节点组成。每个节点都接受交易所。 Exchange 有一条 IN 和 OUT 消息。因此,在您的情况下,带有 http4 组件的节点采用了名为 google.com 的 Exchange,并将正文和标头写入 OUT 消息。接下来,节点与您的处理器进行交换。现在 IN 消息具有来自前一个节点(http4)的响应,但是您正在打印 OUT 是空的!所以 IN 和 OUT 消息是每个节点而不是每个路由!希望对您有所帮助!
      • 天哪,这才是真正的答案!现在很清楚,你是对的。请复制您的最后一条评论作为问题的答案,我很乐意接受!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2011-10-14
      相关资源
      最近更新 更多