Какая функциональная модель используется в современном Spring Cloud Stream?
- Как писать обработчики в Spring Cloud Stream 3+?
Функциональная модель (Spring Cloud Stream 3+): обработчики — **бины java.util.function**: Consumer<T> читает, Function<T, R> читает и пишет, Supplier<T> публикует. Аннотации @EnableBinding, @StreamListener удалены.
- Имя бина задаёт имя привязки:
process-in-0,process-out-0 - Несколько функций —
spring.cloud.function.definition=process;audit - Отправка «по требованию» — StreamBridge
А ещё Реактивный вариант: Function<Flux<T>, Flux<R>>
Подробно
До версии 3 использовали @EnableBinding, каналы и @StreamListener; сейчас это удалено.
Функциональный стиль:
@Bean
Function<OrderCreated, InvoiceRequested> billing() {
return order -> new InvoiceRequested(order.id(), order.total());
}
@Bean
Consumer<InvoicePaid> notify() { return paid -> mailer.send(paid); }
spring.cloud.function.definition: billing;notify
spring.cloud.stream.bindings:
billing-in-0.destination: orders
billing-out-0.destination: invoices
notify-in-0: { destination: payments, group: notifications }
Отправка вне функции — streamBridge.send("invoices-out-0", payload) (например, из REST-контроллера).
Плюсы: обработчики — обычные функции, легко тестировать без брокера; композиция (billing|enrich); реактивные варианты для потоков.
Что хотят услышать
- Функции как обработчики.
- Именование привязок и definition.
- StreamBridge.
Частые ошибки
- Писать @StreamListener в новом коде.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Только XML endpoints
- ✓Supplier, Function и Consumer beans
- ✗Только наследование от AbstractController
- ✗JSP tag libraries
Что спросят дальше
- Что такое input/output binding?
- Как задать несколько функций?
Разбор темы
- Spring Cloud Stream
Binder abstraction, functional model, bindings, consumer groups, partitioning и trade-offs поверх Kafka/RabbitMQ.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.