2014-10-01 5 views
1

В моем приложении я использую несколько пользователей для приема сообщений от издателя redis. Но теперь проблема заключается в потере данных и дублировании данных. Я имею в виду, что несколько потребителей получают повторное сообщение с тем же сообщением. Я решаю этот вопрос в redis? а также может предоставить пример в java am new для обмена сообщениями redis. Пожалуйста, помогите мне.Потеря данных в случае нескольких пользователей для обмена сообщениями redis

Вот мой приемник

@Configuration 
@EnableScheduling 
public class ScheduledRecevierService { 

    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); 
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 

    @Bean 
    RedisConnectionFactory redisConnectionFactory() { 
     LOGGER.info("in redisConnectionFactory"); 
     JedisConnectionFactory redis = new JedisConnectionFactory(); 
     redis.setHostName("ipaddress"); 
     redis.setPort(6379); 
     return redis; 
    } 

    @Bean 
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) { 
     LOGGER.info("in template"); 
     return new StringRedisTemplate(connectionFactory); 
    } 

    @Scheduled(fixedRate = 1000) 
    public void getScheduledMessage() { 

     StringRedisTemplate template = template(redisConnectionFactory()); 
     System.out.println("The time is now " + dateFormat.format(new Date())); 
     LOGGER.info("Sending messages..."); 

     String message = template.opsForList().leftPop("point-to-point-test"); // latch.await(); 
     // template.convertAndSend("chat", "Hello from Redis! count: " + i); 
     LOGGER.info("Got message " + message + " from chat1 channel"); // 
    } 

} 

Я бег это приложение в множественных потребителях instances.My очереди «точка-точку-тест», имеющая 1000 сообщений, что я наблюдал это в нескольких журналах сервера читает то же самое сообщение ,

Можем ли мы реализовать связь по протоколу точка-точка в redis с помощью java?

RPOPLPUSH команда в redis решить эту проблему? Если да, отправьте пример в java.

из быстрых несколько дней я изо всех сил, чтобы исправить эти проблемы в Redis сообщений, пожалуйста, помогите мне

+0

Попробуйте показать собственные расследования. –

ответ

0

Используйте REDIS транзакции, чтобы убедиться, что все команды выполняются последовательно http://redis.io/topics/transactions

Используйте Jedis в качестве клиентской библиотеки Java см его тест на использование по операциям https://github.com/xetorthio/jedis/blob/master/src/test/java/redis/clients/jedis/tests/commands/TransactionCommandsTest.java

+0

Моя проблема связана с несколькими потребителями только в том случае, если она работает нормально. Но если я использую несколько потребителей, некоторые из сообщений отсутствуют, и такое же сообщение читает несколько потребителей? – user4097819

+0

Используете ли вы какую-либо клиентскую библиотеку или вы написали код для выполнения команды redis? Используйте Jedis, чтобы написать своего потребителя, а затем посмотреть, не остались ли вы проблемы –

+0

Поскольку такие команды в redis являются атомарными, поэтому, когда потребитель делает LPOP, он получит элемент, удаленный из списка, и никакой другой потребитель не получит этот элемент. Вы не должны видеть дубликатов. Попробуйте написать своих потребителей только в jedis, не используйте весенние данные и посмотрите. –

 Смежные вопросы

  • Нет связанных вопросов^_^