springboot2.0.3 redis一会不操作会自动断开连接 队列channel监听器失效

在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");
    }

猜你喜欢

转载自blog.csdn.net/u010588262/article/details/81535352
今日推荐