Redis消息发布订阅的稳定性验证结论

背景

2019年的某个时候, 笔者负责解决公司系统内的基于Redis pubsub + Websocket消息推送的功能稳定性

过程

NO Detail
1. 初始情况: 笔者发现手写的Jedis客户端容易出现 断连, 每个小时至少发生一次, 时间不定. 没有进行多少次改参数的尝试.(因为已经打算寻找中间件解决方案).
2. 第一次改进: 后来考察了Spring Data Redis组件, 非常容易集成, 配置服务器地址 端口 密码, 数据库即可, 简单就是美, 不需要研究那些超时参数 testOnBorrow, 这些中间件的编写者都实践好的. 结果就是稳定运行了一年多. 再也没人说收不到消息推送.
3. 第二次改进: 2020年6月份(当前写文时间), 因为业务的关系, 又来处理消息推送相关逻辑, 这时不能是原来的水平, 于是抽空看了一下 Spring Data Redis 现在版本很新, 内置有Lettuce驱动, 于是实验了一下 Lettuce, 写一个小SpringBoot应用 放一个晚上. 经过初步的观察, Lettuce的性能更强, 更加关注连接的稳定性, ConnectionWatchdog会自动重连(Jedis Connection Factory的重连是Spring Data Redis提供的, 重连频率为1小时 也有重连delay可以修改), 而且非常迅速, 因此, 遂打算将Jedis驱动换成 Lettuce驱动. 经过尝试 相同的Redis实例, Lettuce的重连频率时15分钟, 这个由什么决定暂不清楚

结论

这个问题不大不小, 对于消息推送的稳定性因素 有很多:

  1. 服务端自动断开, 可能设置了最大会话长度等等, 例如 1小时.
  2. 客户端网络环境问题
  3. 根本不是参数问题

没必要深究

解决方案

  1. Spring Data Redis 足够满足需求
  2. 或许可以选择Lettuce作为 Spring Data Redis的底层驱动
  3. 对这个稳定性要求更高的 可以用 Kafka/Rabbit MQ等 其他专门做发布订阅的消息队列中间件.
  4. 甚至可以不用websocket, 直接接口 poll.
posted @   一杯半盏  阅读(1593)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示