如何获得minIdleTime大于某个值的待处理项目?

问题描述

使用Redis流,我们可以处理一些消费者尚未完成的待处理项目。 我可以使用xpending command找到此类物品。 让我们有两个待处理项目:

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设置过滤器的问题。我有几个服务节点(AB)进行僵尸检查:XPENDING mystream test_group - 5 1 他们每个人都收到"1-0"项,他们制作了xclaim,只有其中一个(例如A)成为所有者,并开始处理该项。但是B再次运行xpending获取新项目,但由于尚未处理("1-0"在工作),它再次收到A,看起来像我所有的队列被阻止。

有什么解决方案可以避免并同时处理待处理的项目吗?

解决方法

您想查看文档,尤其是Recovering from permanent failures

通常使用的方式是:

  1. 您允许同一使用者在恢复后使用其从PEL发送的邮件。
  2. 只有相当长的时间过去后,您才XCLAIM来自另一个使用者,这表明原始使用者处于永久性故障中。
  3. 您使用交货计数来检测毒药或死亡信。如果邮件已重试多次,最好将其报告给管理员进行分析。

因此,通常您所需要的就是从其他消费者那里看到PEL的最老年龄,以进行永久性故障恢复逻辑,并且一一消耗掉。