项目场景:
提示:Stream可以创建消费者组:
在学习使用Stream模拟消息队列,在创建消费着组的时候出现了一些坑
问题描述
提示:这里Stream里的消息还从未被任何消费者读取过
已经创建了Stream并由两条消息,在创建Stream的消费者组后却不能消费,一直返回null
Redis客户端代码:
> 云服务Redis connected!
1、创建Stream,并添加两条消息
> XADD mystream * name Ikun sex woman
1701528023834-0
> XADD mystream * name Mike sex man
1701528031139-0
2、给mystream创建消费者组mygroup
> XGROUP CREATE mystream mygroup $ MKSTREAM
OK
3、给消费者组添加消费者consumer1、consumer2
> XGROUP CREATECONSUMER 'mystream' 'mygroup' consumer1
1
> XGROUP CREATECONSUMER 'mystream' 'mygroup' consumer2
1
注意到这里都一切正常,按理说我应该是可以消费这两条消息的,但是!!!
4、消费者consumer1从mygroup消费一条消息
> XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
null
我消费不到任何消息,可是我明明有两条消息啊,而且还未没读取过!!!
原因分析:
提示:我一度认为是消费的地方出了问题,但后来发现根本不是,而是消费者组的创建上:
XGROUP CREATE mystream mygroup $ MKSTREAM
这个命令是在网上copy的,问题就出在它上边,翻了官网才了解它的含义是如果未创建则创建Stream,但不会提取已经存在的数据加入消费者组
解决方案:
知道问题出在哪就好说了,完后我改了命令重试了一遍一切全正常了,下面是改后的命令
XGROUP CREATE mystream mygroup 0
附上它的含义如果Stream已经创建了则从头提取整个流把里边已经有的数据加入到消费者组,如果Stream未创建则报错
这里额外附上我当时怀疑消费出问题发现的一些知识点
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream 0
含义:获取从未被读取的或已被我读取但未ACK的消息
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
含义:获取从未被读取过的消息