一、问题简述:
1.本地环境中,将消息发送到RDelayQueue中后,等待消息超时后,消息自动到达RBlockQueue中,此时我监听RBlockQueue的代码获取消息并消费成功。
2.生产环境中,只有服务启动,销毁的时候。RDelayQueue中的延时消息才会到达RBlockQueue中。
可以正常发送消息到达redis中的RDelayQueue中,但消息超时后,无法到达RBlockQueue中,故导致监听RBlockQueue的代码获取不到延时消息,无法发布消息事件,导致消费无法被正常消费。
二、依赖版本及redis版本:
1.依赖版本boot2.1.5 redisson3.13.1
2.本地环境redis(win) v2.x 生产环境redis(阿里云资源) v4.x
三、延时队列实现的方案及配置
1.通过yml配置文件的方式配置单机redis(配置参考的官网)
2.BlockQueue(我的延时队列组件名称)初始化后,通过redissonClient获取RDelay和RBlock并赋值给成员变量
2.使用spring task定时任务扫描RBlockQueue中的数据,如果存在则通过事件发布组件(实现了AppcationContextAware接口的类)发布从阻塞队列中获取到的已超时的延时消息,并包装事件发布。
3.消息消费则是通过监听Event,从而获取消息内容进行业务消费。
四、现象
1.本地测试中,发送消息,延时超时,到达阻塞队列,获取消息,封装事件发布,消息监听消费。一整套数据流完全打通。可到生产环境中,就是不行。
redisson延时队列失效
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- BCS-点心 2022-05-11 13:39关注
本地测试,生产不行,这样的问题开发中遇到过,我解决的方案是:
1.查看本地跟线上依赖包版本是否相同
2.通过日志查看问题具体出现的地方,具体解决像你这里,先要确定下问题出在哪个环节
解决评论 打赏 举报无用 1
悬赏问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?