XAUTOCLAIM

更改或获取消费者组中消息的所有权,就好像消息被传递给消费者组成员一样。

语法

XAUTOCLAIM key group consumer min-idle-time start [COUNT count] [JUSTID]

引入版本:6.2.0

复杂度摘要:O(1)

此命令转移与指定条件匹配的待处理流条目的所有权。从概念上讲,XAUTOCLAIM 相当于先调用 XPENDING,然后再调用 XCLAIM,但通过类似 SCAN 的语义提供了一种更直接的方法来处理消息传递失败。

与 XCLAIM 类似,该命令对 key 处的流条目以及所提供的 group 的上下文中进行操作。它将等待时间超过 min-idle-time 毫秒且 ID 等于或大于 start 的消息的所有权转移给 consumer。

可选的 count 参数(默认为 100)是该命令尝试声明的条目数的上限。在内部,该命令开始从 start 扫描消费者组的待处理条目列表 (PEL),并过滤掉空闲时间小于或等于 min-idle-time 的条目。命令扫描的待处理条目的最大数量是 count 的值乘以 10(硬编码)的乘积。因此,申请的条目数可能会小于指定值。

可选的 JUSTID 参数将回复更改为仅返回成功声明的消息 ID 数组,而不返回实际消息。使用此选项意味着重试计数器不会增加。

该命令以数组形式返回所声明的条目。它还返回一个流 ID,用于类似游标的用途,作为后续调用的 start 参数。当没有剩余的 PEL 条目时,该命令将返回特殊的 0-0 ID 以表示完成。但是,请注意,即使在使用 0-0 作为 start ID 的扫描完成后,您可能仍希望继续调用 XAUTOCLAIM,因为已经过去了足够的时间,因此较早的待处理条目现在可能有资格申领。

请注意,只有空闲时间超过 min-idle-time 的消息才会被声明,并且声明消息会重置其空闲时间。这确保了只有单个消费者可以在特定时刻成功声明给定的待处理消息,并且大大降低了多次处理同一消息的概率。

使用 XNACK 释放回组的消息可以立即声明,因为它们的传递时间设置为 0,满足任何最小空闲时间要求。

在迭代 PEL 时,如果 XAUTOCLAIM 偶然发现流中不再存在的消息(被 XDEL 修剪或删除),它不会声明该消息,而是从找到该消息的 PEL 中将其删除。该功能是在 Redis 7.0 中引入的。这些消息 ID 作为 XAUTOCLAIM 回复的一部分返回给调用者。

最后,使用 XAUTOCLAIM 声明消息也会增加该消息的尝试传递计数,除非已指定 JUSTID 选项(仅传递消息 ID,而不传递消息本身)。由于某种原因而无法处理的消息(例如,因为消费者在处理消息时系统性崩溃)将表现出可通过监控检测到的高尝试传递计数。

必需参数

key

流键。

group

消费者组名称。

consumer

拥有所声明消息的消费者的名称。

min-idle-time

仅声明已空闲至少这么长时间(以毫秒为单位)的消息。

start

开始扫描的消息 ID。使用 0 从 PEL 的开头开始。

可选参数

COUNT count

每次呼叫尝试索取的消息数。默认为 100。

JUSTID

仅返回已声明消息的 ID,不返回其字段,并且不增加其重试计数器。

示例

> XAUTOCLAIM mystream mygroup Alice 3600000 0-0 COUNT 25
1) "0-0"
2) 1) 1) "1609338752495-0"
      2) 1) "field"
         2) "value"
3) (empty array)

在前面的示例中,您声明最多 25 个待处理条目,这些条目从流开头开始已空闲(尚未确认或声明)至少一小时。 mygroup 组中的消费者 Alice 拥有这些消息的所有权。

返回的流ID为0-0,表示XAUTOCLAIM扫描了整个流。第三个回复元素是一个空数组,这意味着 XAUTOCLAIM 没有找到任何已删除的消息。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动

返回值

RESP2

数组回复,具体而言,是一个包含三个元素的数组: 1. 用作下一次调用 XAUTOCLAIM 的 开始 参数的流 ID。 2. 数组回复 包含所有成功认领的消息,其格式与 XRANGE 相同。 3. 数组回复 包含流中不再存在的消息 ID,并且已从找到它们的 PEL 中删除。

RESP3

数组回复,具体而言,是一个包含三个元素的数组: 1. 用作下一次调用 XAUTOCLAIM 的 开始 参数的流 ID。 2. 数组回复 包含所有成功认领的消息,其格式与 XRANGE 相同。 3. 数组回复 包含流中不再存在的消息 ID,并且已从找到它们的 PEL 中删除。

资料来源:Redis 官方 XAUTOCLAIM 文档;中文内容参考 Redis 文档许可。