redis发布订阅客户端报错
转自简书【https://www.jianshu.com/p/a85ec38245da】
最近遇到一个问题,springBoot程序中有一个监听器,监听redis中发来的消息(其实是监听一个key的消失,以此做定时),后台程序监听不到redis消息。
刚开始以为是redis键值未写入,或者过期时间不对,经过排查,在定时开始时,key已经写入,并且过期时间与系统中设置的一致。并且未见明显报错,直到在控制台发现:
2019-10-11 09:16:14,574 ERROR [rules-engine-4] o.s.d.r.l.RedisMessageListenerContainer - Connection failure occurred. Restarting subscription task after 5000 ms
2019-10-11 09:16:14,597 ERROR [agentconnection-pubsub-50] o.s.d.r.l.RedisMessageListenerContainer - Connection failure occurred. Restarting subscription task after 5000 ms
2019-10-11 09:16:14,599 ERROR [servicesession-expire-84] o.s.d.r.l.RedisMessageListenerContainer - Connection failure occurred. Restarting subscription task after 5000 ms
这时候才反应过来后台程序与redis连接出现了问题。
1)百度查看该报错,很多是说:Redis订阅客户端订阅buffer超过32M或持续60秒超过8M,订阅立即被关闭!(意思是说客户端消费速度比较慢,导致产生的消息大量堆积超过了限制客户端被关闭)
client-output-buffer-limit pubsub 32mb 8mb 60
2)可以修改配置为(使其不受限制):
config set client-output-buffer-limit "normal 0 0 0 slave 268435456 67108864 60 pubsub 0 0 0"
3)这次遇到的问题好像不是这样的,看到 “client-output-buffer-limit pubsub如果达到限制会关闭客户端,然后客户端会报此次这个错误,那是不是有可能是其他地方将这个客户端关闭了造成这个错误;”
4)服务器的redis是部署在阿里云,并且使用了haproxy(这个东西没用过,还得学习,贴一张其他博主的图纪录一下)

timeout client:客户端非活动状态的超时时长
timeout server:客户端与服务器端建立连接后,等待服务器端的超时时长
并借用了别人的解决方案
- 暂时解决方案
1)haproxy超时时间仍改回3min,因为后端代理了mysql等服务;
2)暂时继续沿用目前这种方案,因为程序具备断开重连机制,虽然redis发布订阅不能持久化,断开连接期间发布的消息订阅端有可能丢失,但是目前业务发布消息很少,几个月发布一次消息,在发布消息的时候连接断开的概率还是比较小的,所以暂不处理。 - 永久解决方案
1)采用Rabbit Mq取代redis
2)tomcat直连redis
3)代码处增加额外的发布信息,确保连接idle时间不会超过3min
redis发布订阅客户端报错的更多相关文章
- Redis系列(三)-Redis发布订阅及客户端编程
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...
- Linux(6)- redis发布订阅/持久化/主从复制/redis-sentinel/redis-cluster、nginx入门
一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...
- 我在生产项目里是如何使用Redis发布订阅的?(一)使用场景
转载请注明出处! 导语 Redis是我们很常用的一款nosql数据库产品,我们通常会用Redis来配合关系型数据库一起使用,弥补关系型数据库的不足. 其中,Redis的发布订阅功能也是它的一大亮点.虽 ...
- 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...
- RedisRepository封装—Redis发布订阅以及StackExchange.Redis中的使用
本文版权归博客园和作者本人吴双共同所有,转载请注明本Redis系列分享地址.http://www.cnblogs.com/tdws/tag/NoSql/ Redis Pub/Sub模式 基本介绍 Re ...
- python中使用redis发布订阅者模型
redis发布订阅者模型: Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel.发布者和订阅者都是Redis客户端,Channel则 ...
- redis发布/订阅
发布订阅简介 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,消息之间通过channel传递. 准备工作 两台安装了redis的机器(虚拟 ...
- redis发布订阅、事务、脚本
Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 cha ...
- Redis发布订阅机制
1. 什么是Redis Redis是一个开源的内存数据库,它以键值对的形式存储数据.由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也 ...
随机推荐
- 团队作业1——团队展示&选题 (追忆少年)
目录 一,团队展示 1.1队名 1.2队员学号 1.3项目描述 1.4队员风采 1.5团队分工 1.6团队合照 1.7团队特色 (一)目标导向 (二)协作基础 (三)共同的规范和方法 (四)技术或技能 ...
- SPSSAU新功能上线:高级公式、综合得分一键计算!
一直关注我们的朋友们一定会发现,近期SPSSAU增添了很多新功能. 我们精挑细选出6个最常使用的功能,介绍给大家,看看这些新功能你有没有解锁成功呢? 01 一键删除无效样本 “无效样本”功能中,添加了 ...
- 安装openssl后yum不能使用的解决办法
重新编译安装ioenssl后,发现yum命令不能使用,找到如下解决办法 提示错误是 openssl: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version ...
- PyTorch入门-CIFAR10图像分类
CIFAR10数据集下载 CIFAR10数据集包含10个类别,图像尺寸为 3×32×32 官方下载地址很慢,这里给一个百度云: https://pan.baidu.com/s/1oTvW8wNa-VO ...
- 08.简单学习redis哨兵主备切换和选举算法
一.选举的授权 每次一个哨兵要做主备切换,首先需要quorum数量的哨兵认为odown,然后选举出一个哨兵来做切换,这个哨兵还得得到majority哨兵的授权,才能正式执行切换 如果quorum &l ...
- unity 模板测试 详解
https://blog.csdn.net/u011047171/article/details/46928463#t4
- mock之初体验
刚接触vue的时候,看到github上有人的开源项目介绍使用mock可以模拟接口调用,可以使用模拟数据避免跟后端交互也可以实现前端功能的完美展现,当时觉得卧槽,mock这个东西这么神奇的吗?那一定要学 ...
- 【Java/DateTime】用当前日期时间与确定日期时间比较,大于则执行某动作
代码: package logbackCfg; import java.text.ParseException; import java.text.SimpleDateFormat; import j ...
- LayUi超级好用的前端工具
日期:https://www.layui.com/laydate/ LayUi 首页地址:https://www.layui.com/
- Oracle Sqlplus 三项设置
显示sql执行时间:set timing on 显示sql execute plan:set autotrace trace exp 关闭 set autotrace off 设置行宽:set li ...