0

使用 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正在工作)并且看起来我的所有队列都被阻止了。

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

4

1 回答 1

0

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

通常使用的方式是:

  1. 您允许同一消费者在恢复后使用来自 PEL 的消息。
  2. 您仅XCLAIM在经过相当长的时间后才来自另一个消费者,这表明原始消费者处于永久失败状态。
  3. 您使用交付计数来检测毒丸或死亡信。如果一条消息已被重试多次,最好将其报告给管理员进行分析。

所以通常你只需要从其他消费者那里查看PEL中最老的永久故障恢复逻辑,然后你一个一个地消费。

于 2020-08-27T17:16:01.363 回答