彼らはステータスの間隔でポーリングよりも準備ができている時はいつでも反応性フラックス/モノラルを使用して上流へメッセージをプッシュする方法は?

MrKulli:

春反応性フラックスの間隔を使用してプッシュ彼らはフラッシュ後の準備/利用可能と近い接続されたときに上流へのメッセージではなく、メッセージのポーリングしようとしています。

@GetMapping(value = "/getValue/{randomId}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> statusCheck(@PathVariable("randomId") @NonNull String randomId) {

return Flux.<String>interval(Duration.ofSeconds(3))
                .map(status -> {
                    if (getSomething(randomId).
                            equalsIgnoreCase("value"))
                        return "value";
                    return "ping";
                }).take(Duration.ofSeconds(60)).timeout(Duration.ofSeconds(60));
    }

カフカリスナーは、マップ内の間隔でランダムID値のための方法チェックをgetSomething、につれてマップにランダムID値を更新します。だからではなく、間隔でチェックし、マップ内のデータを格納する、私は、リスナーが受信したときにクライアントにメッセージをプッシュします。

MrKulli:

私は、このstackoverflowのに基づくソリューションを構築し、イベントストリームへのMessageListenerを埋めるためにEmitterProcessorを使用する方法-ホット出版-春5のWeb反応、答え、彼らが利用できるよう熱いメッセージを公開するEmitterProcessorを使用しました。

ここではサンプルコードはあります

@GetMapping(value = "/getValue/{randomId}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> statusCheck(@PathVariable("randomId") @NonNull String randomId) {
    EmitterProcessor<String> emitterProcessor = EmitterProcessor.create();
    Flux<String> autoConnect = emitterProcessor.publish().autoConnect();
    FluxSink<String> sink = emitterProcessor.sink();
    //storing randomId and processor sink details
    randomIdMap.putIfAbsent(randomId, emitterProcessor);
    /** This will return ping status to notify client as 
    connection is alive until the randomId message received. **/
    sendPingStatus(sink, randomId);
}

それはカフカの消費者と密接なフラックスの接続に到着すると、クライアントにプッシュメッセージにどのようにメソッドショーの下に。

@KafkaListener(topics = "some-subscription-id",
        containerFactory = "kafkaListenerContainerFactory")
public void pushMessage(SomeMessage message, Acknowledgment acknowledgment) {
    EmitterProcessor emitter = randomIdMap.get("randomId");
    if (emitter != null ) {
        emitter.onNext(message);
        emitter.onComplete();
        randomIdMap.remove("randomId");
        acknowledgment.acknowledge();
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=237146&siteId=1