在springboot项目里使用redis做队列的,教程网上很多不赘述了,使用过程中会遇到短时间不操作(五分钟左右),redis连接就断开了,再使用redis时会报连接超时,此次操作会失败,然后几秒内会重连,重新连上之后又可以正常往redis写东西了,但是注册的监听器失效了,也就是说往队列写的消息无法消费了
监听器的配置:
@Configuration
public class SubscriberConfig {
/**
* 创建连接工厂
*
* @param connectionFactory
* @param listenerAdapter
* @return
*/
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("actionQueue"));
return container;
}
@Autowired
Receiver receiver;
/**
* 绑定消息监听者和接收监听的方法
*
* @return
*/
@Bean
public MessageListenerAdapter listenerAdapter() {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
在网上找redis的重连或者心跳机制没有太多信息
通过spring schedual自己写个定时器,10秒执行一次,手动心跳,解决了问题
@Scheduled(cron = "0/10 * * * * *")
public void timer() {
redisTemplate.opsForValue().get("heartbeat");
}