【问题标题】:Receive Redis streams data using Spring & Lettuce使用 Spring & Lettuce 接收 Redis 流数据
【发布时间】:2020-01-21 14:28:48
【问题描述】:

每当 Redis 流附加新记录时,我都有以下 Spring boot 代码来接收值。问题是接收者永远不会收到任何消息,而且订阅者在使用subscriber.isActive() 检查时始终处于非活动状态。这段代码有什么问题?我错过了什么? Doc 供参考。

在spring boot启动时,初始化必要的redis资源

生菜连接工厂

@Bean
public RedisConnectionFactory redisConnectionFactory() {
    return new LettuceConnectionFactory("127.0.0.1", 6379);
}

来自连接工厂的 RedisTemplate

@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(connectionFactory);
    return redisTemplate;
}

Rest 控制器将数据附加到 redis 流

@PutMapping("/{name}")
public String post(@PathVariable String name) {
    return redisTemplate.opsForStream().add(StreamRecords.newRecord().in("streamx").ofObject(name)).getValue();
}

JMS 风格的命令式消息监听器

@Component
public class MyStreamListener implements StreamListener<String, MapRecord<String, String, String>> {

@Override
public void onMessage(MapRecord<String, String, String> message) {
    System.out.println("message received: " + message.getValue());
}

}

初始化监听器

  @Bean
public Subscription listener(MyStreamListener streamListener, RedisConnectionFactory redisConnectionFactory) throws InterruptedException {
    StreamMessageListenerContainer<String, MapRecord<String, String, String>> container = StreamMessageListenerContainer
            .create(redisConnectionFactory);
    Subscription subscription = container.receive(Consumer.from("my-group-1", "consumer-1"),
            StreamOffset.create("streamx", ReadOffset.latest())), streamListener);
    System.out.println(subscription.isActive()); // always false
    return subscription;
}

不过,我可以通过 api 附加到流中。

【问题讨论】:

    标签: redis spring-data-redis


    【解决方案1】:

    重要的一步是,订阅完成后启动StreamMessageListenerContainer

    container.start();
    

    【讨论】:

    • 你从哪里找到这个的?我花了 30 多分钟试图弄清楚自己。不幸的是,春季文档没有帮助
    • Spring document 写得太差了。它甚至没有提醒我们启动容器。
    • 不仅 Spring 文档,甚至 lib 文档也很差。我想我是从 Java 文档中找到的。
    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 2018-06-01
    • 2019-01-22
    • 2018-07-06
    • 2020-11-16
    • 2023-01-22
    • 2021-03-20
    • 2020-03-16
    相关资源
    最近更新 更多