Warm tip: This article is reproduced from serverfault.com, please click

其他-从 React 式API读取时如何保持Redis连接打开

(其他 - How to keep redis connection open when reading from reactive API)

发布于 2020-11-25 13:33:53

我一直在使用spring react api(使用生菜驱动程序)监听redis流。我正在使用独立连接。似乎 React 堆的事件循环在每次读取消息时都会打开一个新连接,而不是保持连接打开。运行程序时,我在计算机中看到许多TIME_WAIT端口。这正常吗?有没有办法让生菜知道重新使用连接而不是每次都重新连接?

这是我的代码:

StreamReceiver<String, MapRecord<String, String, String>> receiver = StreamReceiver.create(factory);
return receiver
    .receive(Consumer.from(keyCacheStreamsConfig.getConsumerGroup(), keyCacheStreamsConfig.getConsumer()),
        StreamOffset.create(keyCacheStreamsConfig.getStreamName(), ReadOffset.lastConsumed()))//
    // flatMap reads 256 messages by default and processes them in the given scheduler
    .flatMap(record -> Mono.fromCallable(() -> consumer.consume(record)).subscribeOn(Schedulers.boundedElastic()))//
    .doOnError(t -> {
      log.error("Error processing.", t);
      streamConnections.get(nodeName).setDirty(true);
    })//
    .onErrorContinue((err, elem) -> log.error("Error processing message. Continue listening."))//
    .subscribe();
Questioner
falcon
Viewed
11
falcon 2020-12-10 02:42:55

看起来spring-data-redis库仅在流接收器选项中将轮询超时设置为'0'并将其作为第二个参数传递时才重新使用该连接StreamReceiver.create(factory, options)通过查看spring-data-redis的源代码来找到。