java - Apache Camel - 如何使用InputStream作为源?

标签 java apache-camel

我想做的事情看起来很简单,或者至少是一个常见的任务。然而,我无法找到任何示例,这一事实告诉我,我的处理方式是错误的。

我有一个 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/

相关文章:

java - java中的项目依赖

java - forEach 不修改 java(8) 集合

java - 如何使用 XML 类型进行 POST 并在 Camel 中获得 java.lang.String 形式的答案?

c# - .net 中的 Apache Camel 替代品?

java - Apache Camel 2.16丰富 - JUnit中的端点上没有可用的消费者

java - 无法获取 JMX 服务 URL

java - 有哪些工具可以让我从 Java 转储和重新创建数据库?

java - Spring Boot 从服务调用 Rest Controller 方法

java - 从 Java 调用 Scala "val function"会出现错误

apache-camel - Camel HTTPComponent 选项与 HTTPEndpoint 选项