【发布时间】:2021-05-03 12:47:26
【问题描述】:
我正在尝试使用 pymongo 来侦听更改流,同时对故障/重启具有弹性。因此,我将恢复令牌存储在 Redis 中以供以后重用。
这是我试过的代码
# Skipping pymongo and redis initialisation
if redis.exists('resumeToken'):
resume_token = pickle.loads(redis.get('resumeToken'))
else:
resume_token = None
stream = db.my_collection.watch(
pipeline=[{'$match': {'fullDocument.type': 'something'}}],
resume_after=resume_token,
full_document='updateLookup',
max_await_time_ms=500
)
change = stream.next()
redis.set('resumeToken', pickle.dumps(change['_id']))
print(change)
第一次运行时,会打印一个更改,然后我会在 Redis 中存储一些内容。
但如果我重新运行,我得到以下错误:
pymongo.errors.OperationFailure: The resume token UUID does not exist. Has the collection been dropped?
我正在使用 MongoDB 3.6.1 和 pymongo 3.7.1-1.1。
有人知道为什么我的简历令牌被拒绝了吗?
【问题讨论】:
-
检查 resumeToken GET/SET value redis 命令。
标签: mongodb pymongo pickle changestream