1

在我的应用程序中,我使用多个消费者从 redis 的发布者接收消息。但是现在的问题是数据丢失和重复数据,我的意思是多个消费者接收到相同的消息。如何在 redis 中解决这个问题?并且还可以在 Java 中提供示例,我是 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"); //
    }

}

我在多个消费者实例中运行此应用程序。我的队列“点对点测试”有 1000 条消息,我观察到的是在多个服务器日志中读取相同的消息。

我们可以使用java在redis中实现点对点协议通信吗?

redis 中的 RPOPLPUSH 命令解决了这个问题?如果是,请在 java 中发布一些示例。

从快几天开始,我一直在努力解决 redis 消息传递中的这些问题,请帮助我

4

1 回答 1

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

于 2014-10-01T07:40:16.133 回答