34.9. 尾部的光标消费者的工作方式
要将光标置于可尾部的光标中,在第一次生成光标时,会将几个特殊标记信号分配给 MongoDB。创建后,光标将保持打开状态,并将在调用 MongoCursor.next()
方法时阻止,直到新数据到达。但是,如果新数据在非确定周期后没有出现,MongoDB 服务器保留自己要终止您的光标。如果您有兴趣继续使用新数据,则必须重新生成光标。为此,您必须记住离开的位置,或者您将再次占用率的其他位置。
Camel MongoDB tail 可移动的光标消费者为您处理所有这些任务。您只是向数据中增加性质的部分字段提供密钥,这样每次重新生成时,都将作为您的光标定位的标记,例如时间戳、后续 ID 等。它可以是 MongoDB 支持的任何数据类型。日期、字符串和 Integers 可以正常工作。我们在这个组件上下文中调用这种机制"tail 跟踪"。
使用者将记住此字段的最后值,以及每当要重新生成光标时,将通过一个过滤器(如 increase Field > lastValue
)运行查询,以便只消耗非读数据。
设置 increasing 字段: 在端点 URI tailTrackingIncreasingField
选项上设置 increase 字段的键。在 Camel 2.10 中,它必须是数据中的顶层字段,目前还不支持此字段的嵌套导航。也就是说,"timestamp"字段是 okay,但"nested.timestamp"将无法工作。如果您需要支持嵌套增加的字段,请在 Camel JIRA 中创建一个 ticket。
光标重新生成延迟: 一个需要注意的是,如果新数据在初始发生时还没有提供,MongoDB 将立即终止光标。由于我们不想超过服务器,因此引进了 cursorRegenerationDelay
选项(默认值为 1000ms)。
例如:
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime") .id("tailableCursorConsumer1") .autoStartup(false) .to("mock:test");
以上路由将消耗来自"flights.cancellations"功能的集合,使用 "departureTime" 作为 increasing 字段,默认的重新生成光标延迟为 1000ms。