Не отмечать сообщение как подтвержденное в реактивной функции с Spring Cloud Stream - PullRequest
0 голосов
/ 11 февраля 2020

Я использую spring-cloud-stream в версии Horsham SR1 с Java 13. Я использую Google Pub / Sub в качестве базовой системы обмена сообщениями.

У меня есть реактивный Function, который выглядит следующим образом:

@Bean
public Function<Flux<Message>, Mono<Void>> messageConsumer() {
    return messageFlux ->
            messageFlux
                    .flatMap(message -> {
                        // do something
                        return something;
                    })
                    .doOnError(throwable -> log.error("could not process  message", throwable))
                    .then();
}

Как я могу заставить Spring на не подтвердить ошибочное сообщение? Достаточно ли создать исключение внутри метода flatMap?

1 Ответ

1 голос
/ 11 февраля 2020

Вы должны понимать, что у каждого подхода есть свои плюсы и минусы, а с реактивным мы не видим потока. Это полностью под вашим контролем. Фактически, одно из основных отличий состоит в том, что указанная выше функция вызывается только один раз, причем, если бы это была императивная функция, она вызывалась бы для каждого сообщения. поток (что бы это ни значило в контексте вашего приложения). Обязательным условием является единица сообщения, поэтому мы можем выполнять такие действия, как подтверждение каждого сообщения, nacks и т. Д. c.

.
...