我想做的事情看起来很简单,或者至少是一个常见的任务。然而,我无法找到任何示例,这一事实告诉我,我的处理方式是错误的。
我有一个 InputStream
我需要用作源。 InputStream
提供了我需要路由到一个或多个目标端点的文本行。 InputStream
的来源有点像黑匣子——它不是来自文件或 URL。我有最基本的流示例工作...使用 System.in 和 System.out:
public class InOutRoute extends RouteBuilder
{
@Override
public void configure() throws Exception
{
from("stream:in")
.to("stream:out");
}
}
我现在想做的就是用我得到的InputStream 替换stream:in
。我认为这将是一个常见的操作,但显然我的想法是错误的。
(编辑)有关流的更多信息:我必须使用的这个“黑匣子”执行操作,然后通过 InputStream
提供有关这些操作的状态更新。当黑盒完成其操作后,我丢弃对 InputStream
的引用。一个潜在的复杂情况:我可能必须同时处理多个 InputStreams
。
最佳答案
那么您想从输入流进行路由吗?为此,您可以使用 bean 组件来调用返回输入流的 bean 方法。
public InputStream giveItToMe() {
...
}
from("bean:myBean?method=giveItToMe")
.to("stream:out");
请注意,当路由完成后,Camel 会再次调用 bean 上的方法(无限循环)。因此,如果您没有流,则要么阻止调用,要么返回 null,然后您需要在路由中过滤它,因为这样 InputStream 将为 null。
您还可以只使用 ProducerTemplate 并通过流调用 Camel 路由,当您想在 Camel 中路由流时,可以从那里获得流
public void someBusinessLogic() {
while (!done) {
InputStream is = ...
template.sendBody("direct:routeMe", is);
...
// logic to know if we should continue or break out
}
}
from("direct:routeMe")
.to("stream:out");
更多详情请访问
关于java - Apache Camel - 如何使用InputStream作为源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22420333/