273.5. 从 Camel 获取数据


要从 Camel 路由订阅数据流,应将交换重定向到命名流,如以下代码片段中所示:

from("timer:clock")
.setBody().header(Exchange.TIMER_COUNTER)
.to("reactive-streams:numbers");
Copy to Clipboard Toggle word wrap

路由也可以使用 XML DSL 编写。

在示例中,未绑定的数字流与名称 编号 关联。可使用 CamelReactiveStreams 工具类访问流。

CamelReactiveStreamsService camel = CamelReactiveStreams.get(context);

// Getting a stream of exchanges
Publisher<Exchange> exchanges = camel.fromStream("numbers");

// Getting a stream of Integers (using Camel standard conversion system)
Publisher<Integer> numbers = camel.fromStream("numbers", Integer.class);
Copy to Clipboard Toggle word wrap

这个流可以和任何被动流兼容库轻松使用。以下是如何将它与 RxJava 2 搭配使用的示例(尽管可以使用任何被动框架来处理事件)。

Flowable.fromPublisher(integers)
    .doOnNext(System.out::println)
    .subscribe();
Copy to Clipboard Toggle word wrap

这个示例将 Camel 生成的所有数字打印到 System.out 中。

273.5.1. 使用直接 API 从 Camel 获取数据

对于短 Camel 路由以及希望使用被动框架的功能结构定义整个处理流的用户(根本不使用 Camel DSL),也可以使用 Camel URI 定义流。

CamelReactiveStreamsService camel = CamelReactiveStreams.get(context);

// Get a stream from all the files in a directory
Publisher<String> files = camel.from("file:folder", String.class);

// Use the stream in RxJava2
Flowable.fromPublisher(files)
    .doOnNext(System.out::println)
    .subscribe();
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat