35.9. 尾部光标消费者的工作方式
要将光标转换为可尾部光标,在首次生成光标时,需要向 MongoDB 发出一些特殊标志。创建后,光标将保持打开状态,并将在调用 MongoCursor.next ()
方法后保持打开,直到新数据到达为止。但是,如果新数据在确定期后没有出现,MongoDB 服务器会保留终止您的光标的权利。如果您有兴趣继续使用新数据,则必须重新生成光标。为此,您必须记住您离开的位置,否则您将再次从 top 开始使用的位置。
Camel MongoDB tailable cursor consumer 会为您处理所有这些任务。您只需在提高性质的数据中为某些字段提供密钥,该特性将作为在每次重新生成光标时定位光标的标记,例如时间戳、顺序 ID 等。它可以是 MongoDB 支持的任何数据类型。日期、String 和 Integers 可以正常工作。我们在此组件上下文中称为"tail 跟踪"。
消费者将记住此字段的最后一个值,并且每当重新生成光标时,它将使用类似: increasingField > lastValue
的过滤器运行查询,以便只消耗未读取的数据。
设置 increasing 字段: 设置端点 URI tailTreasingField 选项上增加字段
的密钥。在 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");
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime")
.id("tailableCursorConsumer1")
.autoStartup(false)
.to("mock:test");
以上路由将使用 "flights. Cancellations" capped 集合,使用 "departureTime" 作为增加字段,默认重新生成光标延迟为 1000ms。