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


要将光标置于可尾部的光标,在首次生成光标时,几个特殊标志将向 MongoDB 发送信号。创建之后,光标将保持打开状态,并在调用 DBCursor.next () 方法时阻止,直到新数据到达为止。但是,如果新数据未发生在非确定周期后,MongoDB 服务器保留了终止您的光标的权利。如果您有兴趣继续消耗新数据,您必须重新生成光标。为此,您必须记住离开的位置,否则您将再次从顶端开始消耗。

Camel MongoDB 尾部的光标使用者将为您处理所有任务。您只需向提高性质数据中的一些字段提供密钥,这样可充当标记来定位光标每次重新生成时的标记,如时间戳、顺序 ID 等。可以是 MongoDB 支持的任何数据类型。可以使用日期、字符串和 Integers 来正常工作。在此组件上下文中,我们称为"需要跟踪"的机制。

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

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

光标回收延迟: 一个需要注意的事项是,如果新数据在初始启动时不可用,MongoDB 将立即终止光标。由于我们不想在这个情形中 重负服务器,所以引入了一个光标修复 选项(值为 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" capped collection 中,使用 "departureTime" 作为增大字段,默认的 regeneration 光标延迟为 1000ms。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat