Java ApacheCamel-如何使用InputStream作为源?
我试图做的似乎很简单,或者至少是一项普通的任务。事实上,我找不到任何例子,但是,告诉我,我走错了这条路 我有一个Java ApacheCamel-如何使用InputStream作为源?,java,apache-camel,Java,Apache Camel,我试图做的似乎很简单,或者至少是一项普通的任务。事实上,我找不到任何例子,但是,告诉我,我走错了这条路 我有一个InputStream需要用作源。InputStream提供了我需要路由到一个或多个目标端点的文本行。InputStream的源代码有点像一个黑盒子——它不是来自文件或URL。我有最基本的流示例…使用System.in和System.out: public class InOutRoute extends RouteBuilder { @Override public
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");
}
}
我现在要做的就是将stream:in
替换为给定的InputStream。我原以为这是一个普通的手术,但很明显我的想法是错误的
(编辑)有关流的更多信息:我必须使用的这个“黑匣子”执行操作,然后通过
InputStream
提供有关这些操作的状态更新。当黑盒完成其操作时,我放弃对InputStream
的引用。一个潜在的复杂问题是:我可能必须同时处理多个输入流。那么您想从输入流路由吗?为此,您可以使用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");
详情请浏览
感谢您的回复;我添加了一些澄清信息。听起来像是在使用ProducerTemplate
我需要自己轮询流并发送任何数据。使用bean组件Camel进行轮询;我只需要提供消息的来源(即流或读取器)。我认为bean组件最适合我……只要bean和流存在,路由就会存在。两个问题:我尝试做的事情是否不同寻常?在o.a.c.component.stream.StreamConsumer
上创建一个消费者模型,用一个stream参数替换System.in
是一个坏主意吗?