101.12. 启用持久性尾部跟踪
要启用这个功能,请在端点 URI 上至少设置以下选项:
-
persistentTailTracking
选项为true
-
persistentId
选项是这个消费者的唯一标识符,因此可以在多个用户间重复使用相同的集合
另外,您可以将 tailTrackDb
、tailTrackCollection
和 tailTrackField
选项设置为自定义存储运行时信息的位置。有关每个选项的描述,请参阅本页顶部的端点选项表。
例如,以下路由会消耗来自"flights.cancellations"的上限集合,使用 "departureTime" 作为增加的字段,默认的重新生成光标延迟为 1000ms,并且打开持久性尾部跟踪,并在"flights.camelTailTracking" id 下保留。在 "lastTrackingValue" 字段中存储最后处理的值( camelTail
Tracking 和 lastTracking
Value 是默认值)。
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true" + "&persistentId=cancellationsTracker") .id("tailableCursorConsumer2") .autoStartup(false) .to("mock:test");
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true" +
"&persistentId=cancellationsTracker")
.id("tailableCursorConsumer2")
.autoStartup(false)
.to("mock:test");
以下是与上述示例相同的另一个示例,但持久性尾部跟踪运行时信息将存储在"lastProcessedDepartureTime"字段中的"trackers.camelTrackers"集合中:
101.12.1. Change Streams Consumer 复制链接链接已复制到粘贴板!
通过更改流,应用程序可以在不需要复杂性和跟踪 MongoDB oplog 的风险的情况下访问实时数据更改。应用程序可以使用更改流来订阅集合上的所有数据更改,并立即响应它们。由于更改流使用聚合框架,因此应用程序也可以过滤特定更改或转换通知。交换正文将包含任何更改的完整文档。
要配置 Change Streams Consumer,您需要指定 consumerType
、database
、collection
和可选的 JSON 属性 streamFilter
来过滤事件。该 JSON 属性是标准的 MongoDB $match
聚合。它可以通过 XML DSL 配置轻松指定:
<route id="filterConsumer"> <from uri="mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }"/> <to uri="mock:test"/> </route>
<route id="filterConsumer">
<from uri="mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }"/>
<to uri="mock:test"/>
</route>
Java 配置:
from("mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }") .to("mock:test");
from("mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }")
.to("mock:test");
您可以将 streamFilter 值外部化到属性占位符中,它允许清理端点 URI 参数并更容易阅读。
changeStreams
使用者类型也会返回以下 OUT 标头:
标头键 | 快速常数 | 描述(从 MongoDB API 文档中提取) | 数据类型 |
---|---|---|---|
|
| 发生的操作类型。可以是以下值之一: insert, delete, replace, update, drop, rename, dropDatabase, invalidate. | 字符串 |
|
| 包含由插入、替换、删除、更新操作(如 CRUD 操作)创建或修改的文档的文档。对于分片的集合,还显示文档的完整分片密钥。如果 _id 字段已经是分片密钥的一部分,则不会重复。 | ObjectId |