GCP PubSub Java реактивный клиент — должны ли сообщения подтверждаться реактивно?

# #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) заставляет нижестоящие операторы использовать планировщик подтверждения.