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也 ...
随机推荐
- chrome浏览器截图
1.F12 打开开发者工具台 2.ctrl + shift + p,弹出搜索框之后输入: full 3.选中Mobile-- Capture fullsize screenshot ,成功保存图片.
- Next Cloud通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享链接地址
Next Cloud如何通过修改数据库表,达到替换文件而不改变分享的链接地址的效果,以及自定义分享的链接地址 本文首发于我的个人博客:https://chens.life/nextcloud-chan ...
- Eazfuscator.net 2020 虚拟化保护(Virtulization)机制分析
一.前言与目标 周末接触了一款游戏They are billons即亿万僵尸,想添加一些新的玩法元素比如新的兵种进去, 打开dnspy看了下,发现是Eazfuscator.net的Virtulizat ...
- 超简单!基于Python搭建个人“云盘”
1. 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码,而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类 ...
- Vuex 注入 Vue 生命周期的过程
首先我们结合 Vue 和 Vuex 的部分源码,来说明 Vuex 注入 Vue 生命周期的过程. 说到源码,其实没有想象的那么难.也和我们平时写业务代码差不多,都是方法的调用.但是源码的调用树会复杂很 ...
- POJ-1273Drainage Ditches(网络流入门题,最大流)
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- CentOS+Phpstudy安装Sqli-Labs
CentOS+Phpstudy安装Sqli-Labs 安装环境 CentOS 7.5 vmware fusion phpstudy 安装步骤 1. 下载sqli-labs 2. 将sqli-labs ...
- 转载:Linux: What’s the difference between a soft link and a hard link?
Link:https://www.moreofless.co.uk/linux-difference-soft-symbolic-link-and-hard-link/ This example sh ...
- leetcode刷题-77组合
题目 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3 ...
- TP6.0中的密码验证逻辑、验证器的使用
目录 1. 场景一:只有一个密码框,并且是可选项,留空不修改密码,不留空则修改密码 2. 场景二:两个密码框,修改密码时有新密码.确认密码,新密码框不为空时,确认密码才验证 1. 场景一:只有一个密码 ...