http4 未设置 HTTP_RESPONSE 属性

http4 not setting HTTP_RESPONSE properties

我有一个非常简单的路由,它获取 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 will store the HTTP response from the external server on the OUT body. All headers from the IN message will be copied to the OUT message, so headers are preserved during routing.

但我从 OUT(body 和 headers 中得到空值)。所有内容仅在 IN 消息中填写。

我是不是遗漏了什么或者是错误?

您正在从处理器中获取 Out body 而未先进行设置。这就是你得到 null 的原因。要完成这项工作,您首先需要明确地将传入消息 headers 和附件复制到 Out Body,然后打印它。或者更轻松地接收您提到的 In 消息。

下一部分来自“Camel in Action”这本书,这本书很棒,我认为它很有帮助。

in practice there’s a common pitfall when using getOut: the incoming message headers and attachments will be lost. This is often not what you want, so you must copy the headers and attachments from the incoming message to the outgoing message, which can be tedious.

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