Redis 流:groups/consumers 命名和清理

Redis streams: groups/consumers naming and cleanup

我有一个相当原始的流用例:多个生产者和 1 个消费者定期批量处理消息。有时会有超过 1 个消费者,这就是为什么我想从“传统的”不可靠队列 (rpush/lrange/ltrim) 切换到流。

实际上有 2 个相关问题:

  1. 使用 Redis 消费者组时,我必须指定组名和消费者名。使用一些硬编码字符串作为组名并使用一些随机字符串作为消费者名称是个好主意吗?消费者只是 1 个进程,在这种情况下,每次启动时它的名称都会不同。在极少数情况下,一次会有 2 个或更多消费者。

  2. 必须先通过 xgroup create 创建消费者组,然后我才能从中 xreadgroup。每次新的消费者启动(使用随机名称)时,它都会被添加到消费者列表中,但即使在进程终止后它仍然存在。我的理解是,在这种情况下,我需要将死消费者的所有未决消息重新分配给活动消费者,然后删​​除旧消费者。这是正确的吗?

  1. 是的,这是正确的方法。
  2. 再次正确。这里的基本逻辑是调用 XPENDING,然后调用 XCLAIM(最后调用 XGROUP DELCONSUMER)。请注意,即将推出的 Redis 6.2(当前为 RC2)通过新的 XAUTOCLAIM command 和添加的 XGROUP CREATECONSUMER.
  3. 使这更容易