Мы долго обсуждали обработку ошибок и другие функции, которые мы используем для императивных функций и как они применяются (или даже могут быть применены) к реактивным функциям, и пробовали несколько разных вещей, но, к сожалению, все сводится к несоответствию импеданса.
Подходы, которые вы описываете, основаны на работе с одним сообщением. Это единица работы в обработчиках сообщений императивного стиля, таких как Function<String, String>
. Вы используете реактивный стиль и тем самым изменили единицу работы с одного сообщения в потоке на весь поток.
Вкратце:
- Function<?, ?> - unit of work is Message
- Function<Flux<?>, Flux<?>> - unit of work is the entire stream
Вы также можете легко наблюдать это как Реактивная функция вызывается только один раз в течение срока службы приложения, тогда как императив вызывается один раз для каждого поступающего сообщения. Причина, по которой я говорю, состоит в том, что основанные на фреймворке подходы, которые мы используем для обязательных обработчиков сообщений (функций), не могут быть применены к реактивному, не вызывая побочных эффектов. И вообще реактивные разработчики понимают это, особенно учитывая богатство реактивного API, особенно в отношении обработки ошибок
В любом случае мы будем соответствующим образом обновлять документацию.