Spring Data Redis模板ConvertAndSend重复消息

时间:2016-07-01 20:18:00

标签: java redis spring-data-redis

我有一个基于redis构建的消息传递应用程序,但是,我注意到spring数据redis模板的convertAndSend可能正在重复消息,因为消息监听器每三次试验中就会收到一条重复消息。

你可以想象这可能不适合某些应用程序,在我的二级存储中抱怨重复键。

我在@Configuration注释类中注册了消息监听器:

@Bean
RedisMessageListenerContainer container(JobsListener receiver, RedisConnectionFactory connectionFactory) {
    MessageListenerAdapter jobsMessageListener = new MessageListenerAdapter(receiver);
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.addMessageListener(jobsMessageListener, new PatternTopic(RedisCacheService.JOBS_KEY));
    return container;
}

在JobsListener实现中,我使用了onMessageReceived方法。

@Override
public void onMessage(Message message, byte[] pattern) {
    System.out.println(new String(message.getBody()));
    Job job = cacheService.processNextJob();
    if (job != null) {
        logger.debug("Job id processed is " + job.getId() + " " + Thread.currentThread().getId());
        update(job);    
    } else {
        logger.debug("Job id processed is null");
    }
}

但是,如果我将synchronized添加到onMessageReceived方法,它似乎可以解决这个问题。

有同步帮助的原因吗?闻起来就像一些并发问题。

0 个答案:

没有答案