消费组
1. 简介
当消息是来自相同流时,那么XREAD已经提供了一种扇出到N个消费者的方法。
然而,在某些问题上,我们想做的不是向多个消费者提供相同的消息流,而是向多个消费者提供来自同一流的不同消息子集。这样有一个明显的好处:通过多个消费者,加速处理消息。
如果我们想象有三个消费者C1、C2、C3和一个包含消息1、2、3、4、5、6、7的流,那么我们希望根据以下图表为消息提供服务:
2. 消费组是如何保证消息不重复,及消费一次的?
消费组就像一个伪消费者,从流中获取数据,实际上为多个消费者服务提供某些保证:
1.每条消息都发送给不同的消费者,因此同一消息不可能传递给多个消费者。
2.在消费者组内,消费者通过一个名称来识别,这是一个区分大小写的字符串,实现消费者的客户来提供。这意味着,即使在断开连接后,流消费者组也会保留所有状态,因为客户将再次声称是同一消费者。然而,这也意味着由消费者供唯一标识符。
3.每个消费者群体都有一个未被使用的ID(下一个被消费的),因此,当消费者请求新消息时,它只能提供以前未发送的消息。
4.消费者需要使用特定命令进行明确确认(a c k)。Redis将确认解释为:此消息已正确处理,因此可以从消费者群体中驱逐。
5.消费者组跟踪当前待处理的所有消息,消费者正在消费,但尚未确认为已处理的消息。多亏了此功能,在访问流的消息历史记录时,每个消费者将只看到传递给它的消息。
在某种程度上,消费者群体可以想象成关于溪流的某种状态:
3.消费者组可以做什么?
1.向消费者提供他们的待处理消息历史记录
2.请求新消息的消费者将如何获得大于last_delivered_id的消息ID。同时保证了不同消费者获得不同的消息。
4 .下一章提示
XGROUP用于创建、销毁和管理消费者团体。
XREADGROUP用于通过消费者组从流中读取。
XACK是允许消费者将挂起的消息标记为正确处理的命令。