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
是一个坏主意吗?