簡體   English   中英

使用 Spring 和生菜接收 Redis 流數據

[英]Receive Redis streams data using Spring & Lettuce

每當 Redis stream 附加新記錄時,我都有以下Spring boot代碼來接收值。 問題是接收者永遠不會收到任何消息,而且,當使用subscriber.isActive()檢查時,訂閱者始終處於非活動狀態。 這段代碼有什么問題? 我錯過了什么? 文檔供參考。

在 spring 開機啟動,初始化必要的 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 controller to append data to redis stream

@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 將 append 轉換為 stream。

重要的一步是,訂閱完成后啟動StreamMessageListenerContainer

container.start();

你以前建過群嗎?

xgroup create streamx my-group-1 $

不確定 spring-data-redis 是否這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM