45.9. 尾部光标消费者如何工作
要将光标转换为可尾部光标的光标,在第一次生成光标时,会将几个特殊标志发送到 MongoDB。创建后,光标将保持打开状态,并在调用 MongoCursor.next ()
方法时阻止,直到新数据到达新数据。但是,如果在确定的句点后没有出现新数据,MongoDB 服务器保留自己终止您的光标的权利。如果您希望继续使用新数据,您必须重新生成光标。为此,您必须记住您离开的位置,否则您将重新从顶部开始消耗。
Camel MongoDB 尾部光标消费者为您负责所有这些任务。您只需要为您的数据中的某些字段提供密钥,它在每次重新生成时都会作为位置的位置,例如:时间戳、顺序 ID 等。它可以是 MongoDB 支持的任何数据类型。找到日期、字符串和整数才能正常工作。在此组件上下文中,我们调用这个机制"需要跟踪"。
消费者将记住此字段的最后值,每当重新生成光标时,它将使用类似过滤器的过滤器运行查询,如 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");
以上路由将使用 "flights.cancellations" capped collection,使用 "departureTime" 作为增加字段,默认的重新生成光标延迟为 1000ms。