我有一个非常简单的路由,可以使用Camel HTTP4组件获取URL并打印内容:
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将在OUT上存储来自外部服务器的HTTP响应 身体。 IN消息中的所有标题都将复制到OUT 消息,因此在路由期间保留标题。
但是我从 OUT (身体和标题)获取空值。只有 IN 消息才会填写所有内容。
我错过了什么或者它是一个错误吗?
答案 0 :(得分:0)
您正在从处理器获取Out正文,而不先进行设置。这就是你得到null的原因。要完成此工作,首先需要将传入的消息,标题和附件明确复制到Out Body,然后打印它。或者更容易接受你提到的In消息。
下一部分来自“Camel in Action”一书,这是一本很棒的书,我觉得它非常有帮助。
在实践中,使用getOut时存在一个常见的陷阱:传入 邮件标题和附件将丢失。这往往不是什么 你想要的,所以你必须从中复制标题和附件 传入消息的传入消息,这可能很乏味。
答案 1 :(得分:0)
在Camel中,路由由节点组成。每个节点都使用Exchange。 Exchange有一个IN和OUT消息。因此,在您的情况下,带有http4组件的节点使用了Exchange,称为google.com,并将正文和标题写入OUT消息。接下来,您的proccesor节点接管了Exchange。现在IN消息有来自前一节点(http4)的响应,但是你打印的是空的!所以IN和OUT消息是每个节点不是每个路由!