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也 ...
随机推荐
- K8s 1.18.6版本基于 ingress-nginx 实现金丝雀发布(灰度发布)
K8s 1.18.6版本基于 ingress-nginx 实现金丝雀发布(灰度发布) 环境 软件 版本 kubernetes v1.18.6 nginx-ingress-controller 0.32 ...
- Android 引入第三方类库
- 如何发挥微博客在seo营销中的作用
http://www.wocaoseo.com/thread-158-1-1.html 我们知道,现在微博客已经发展的相当成熟,普通一个人,只要会上网,就能开通属于自己的博客,进而可以时时地通过微博客 ...
- QString 字符串操作
Qt QString字符串分割.截取(转载) 在做项目中不可避免的会使用到一串字符串中的一段字符,因此常常需要截取字符串. 有两种方式可以解决这个问题: 方法一:QString分割字符串: QStri ...
- WPF新手快速入门系列 3.MVVM
[概要] 这一章主要讲述,讲述MVVM模式和用法. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:580749909.(所有涉及到的源码都上传到了群文件里) 希望加群的人提问时尽量想清楚自己的 ...
- python爬取酷我音乐(收费也可)
第一次创作,请多指教 环境:Python3.8,开发工具:Pycharm 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的 ...
- 【Android】安卓开发之activity如何传值到fragment,activity与fragment传值
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我们利用activity使 ...
- 关于前端Ajaxc传FormData后台如何接收转base64
前端是Jquery的ajax,后台是C#MVC,代码如下: <------前端-----> var formData = new FormData(); formData.append(& ...
- MAC 上编译安装nginx-rtmp-module 流媒体服务器
MAC 上编译安装nginx-rtmp-module 流媒体服务器 记录踩坑过程 下载nginx和nginx-rtmp-module wget http://nginx.org/download/ng ...
- Pinpoint 一款强大的APM工具
背景 程序的监控一直是程序员最头痛的事情之一,现网程序有问题怎么办?看进程看端口 top/free/df 三件套?网络抓包?看日志?所以为了满足这些初级需求很多公司都做了主机监控,进程端口监听等功能, ...