# #reactive-programming #project-reactor #google-cloud-pubsub
#реактивное программирование #проект-реактор #google-облако-pubsub
Вопрос:
Я использую com.google.cloud
/ spring-cloud-gcp-starter-pubsub
и создаю реактивного подписчика с помощью метода PubSubReactiveFactory
«s poll()
«. Что я пытаюсь понять, так это то, должны ли сообщения быть подтверждены в реактивном потоке или сделаны в a doOnNext
? Все примеры, которые я видел, показывают ack()
, что (что возвращает будущее) вызывается doOnNext
без ожидания, но это меня беспокоит.
Во-первых, если ack()
произойдет сбой, то нижестоящие операторы не будут знать об этом.
Во-вторых, вызов ack()
без ожидания потенциально может привести к переполнению пула потоков подтверждения, но это просто внутреннее ощущение, я не уверен?
Итак, варианты, которые я пробовал, следующие:
pubSubReactiveFactory.poll(subscriptionName, 100) .doOnNext(msg -gt; msg.ack()) .subscribe();
или
pubSubReactiveFactory.poll(subscriptionName, 100) .flatMap(msg -gt; Mono.fromCompletionStage(msg.ack().completable()).thenReturn(msg)) .subscribe();
Каков рекомендуемый подход?
Комментарии:
1. Я должен отметить, что 2-й пример (реактивный, с использованием flatMap) заставляет нижестоящие операторы использовать планировщик подтверждения.