问题描述:
黑马点评项目中 基于stream消息队列 实现秒杀案例中 会创建一个Stream类型的消息队列,名为stream.orders 并且在项目启动时,开启一个线程任务,尝试获取stream.orders中的消息,完成下单
无论你是跟着视频还是看的讲义 写的代码 都是完全没有问题 ,但是一运行项目,会发现循环报错问题。具体报错信息如下
解决方法:
第一种原因:
- 可能出现和黑马视频中一样的问题 --- stream.orders这个消息队列名打错了
第二种原因:
-
Redis没有预加载 (主要原因)
简单来说就是运行之前没有在Redis中初始化消费者组
两种解决方法
1. 手动初始化
我是将Redis在Linux中运行的 本地同理
在 Linux 环境下操作 Redis
1. 打开终端,连接到 Redis 并执行命令:
1.1 连接Redis:
redis-cli
1.2创建消费者组:
XGROUP CREATE stream.orders g1 $
2. 注意事项
Stream 是否存在:确保 stream.orders 已经存在,否则创建消费者组会失败。
如果 Stream 不存在,可以先创建一条消息:
XADD stream.orders * key value
具体操作如下图
2. 添加代码 自动初始化
在VoucherOrderServiceImpl 中 重写run()方法里面 添加初始化代码
// 初始化消费者组
try {
// 创建消费者组,如果组已存在则忽略错误
stringRedisTemplate.opsForStream().createGroup(queueName, "g1");
} catch (Exception e) {
log.warn("消费者组 g1 已存在,跳过创建");
}
具体添加位置参考下图
第二个未初始化消费者组也是我遇到的问题,因为这个问题卡了好久
希望这篇文章能节约同样这个问题的学习着的处理时间
第一次发布,如果本文有任何问题或不足之处,欢迎随时指出,我会尽力解答和改进!