101.10. 可尾部的光标消费者的工作方式


要将光标转换为可尾部的光标,首先生成光标时,需要向 MongoDB 发出一些特殊标志。创建后,光标将保持打开状态,并在调用 MongoCursor.next () 方法时阻止,直到新数据到达为止。但是,如果新数据在非确定期之后没有显示新数据,MongoDB 服务器保留自己终止您的光标。如果您希望继续使用新数据,则必须重新生成光标。为此,您必须记住关闭的位置,或者您将再次从顶部开始消耗的位置。

Camel MongoDB tailable 光标消费者会为您处理所有这些任务。您只需要向数据中的一些字段提供密钥,该特性将作为每次重新生成时定位光标的标记,例如时间戳、顺序 ID 等。它可以是 MongoDB 支持的任何数据类型。日期、字符串和整数可以正常工作。我们在此组件上下文中调用这种机制"tail 跟踪"。

消费者将记住此字段的最后一个值,每当要重新生成光标时,它将使用类似过滤器(如 increasingField > lastValue )运行查询,以便只消耗未读取数据。

设置 increasing 字段: 在端点 URI tailTrackingIncreasingField 选项上设置 increasing 字段的密钥。在 Camel 2.10 中,它必须是数据中的顶级字段,因为尚不支持此字段的嵌套导航。也就是说,"timestamp"字段是 okay,但 "nested.timestamp" 将无法正常工作。如果您需要对嵌套增加字段的支持,请在 Camel JIRA 中创建一个问题单。

光标重新生成延迟: 要注意的一个事情是,如果初期没有新数据,MongoDB 将立即终止光标。由于我们不希望在此情形中覆盖服务器,因此增加了一个 cursorRegenerationDelay 选项(默认值为 1000ms)。

例如:

from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime")
    .id("tailableCursorConsumer1")
    .autoStartup(false)
    .to("mock:test");
Copy to Clipboard Toggle word wrap

以上路由会消耗来自"flights.cancellations"的上限集合,使用"departureTime"作为增加字段,默认重新生成光标延迟 1000ms。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat