使用redis流,我们可以有一些消费者没有完成的挂起项目。我可以使用xpending命令找到这样的项目。我们有两个悬而未决的项目:
1) 1) "1-0"
2) "local-dev"
3) (integer) 9599
4) (integer) 1
2) 1) "2-0"
2) "local-dev"
3) (integer) 9599
4) (integer) 1
使用 xpending
我们只能根据id设置过滤器。我有几个服务节点( A
, B
)使僵尸检查: XPENDING mystream test_group - 5 1
他们每个人都收到 "1-0"
物品和他们制造的 xclaim
其中只有一个(例如 A
)成为所有者并开始处理此项目。但是 B
跑 xpending
再次获得新的项目,但它再次收到 "1-0"
因为还没有处理( A
正在工作),看起来我的所有队列都被阻塞了。
有什么办法可以避免它,同时处理挂起的项目吗?
1条答案
按热度按时间lx0bsm1f1#
您希望查看文档,特别是从永久性故障中恢复。
通常使用的方法是:
您允许同一使用者在恢复后使用其来自pel的消息。
只有你
XCLAIM
当一段相当长的时间过去后,从另一个消费者那里,这表明原始消费者处于永久性故障中。你用投递计数来检测毒药或死亡信件。如果一条消息被重试了很多次,那么最好将它报告给管理员进行分析。
所以通常你只需要从其他消费者那里看到pel中最老的年龄就可以得到永久性的故障恢复逻辑,然后你一个接一个地消费。