#spring #spring-cloud-stream
#spring #spring-cloud-stream
Вопрос:
Как настроить несколько входных каналов для вывода в одно и то же место назначения
У меня следующая конфигурация:
spring:
cloud:
stream:
function:
definition: beer;scotch
bindings:
notification:
destination: labron
beer-in-0:
destination: wheat
scotch-in-0:
destination: wiskey
Я хочу создать привязку функции, чтобы каждый входной канал выводил привязку сообщения к уведомлению
Итак, в соответствующем коде:
@Service
class Notifications {
@Bean
fun beer(): Function<String, String> = Function {
// wanted oout channel
// beer -> notification
it.toUpperCase()
}
@Bean
fun scotch(): Function<String, String> = Function {
// wanted oout channel
// scotch -> notification
it.toUpperCase()
}
}
Я хочу использовать имена функциональных привязок Spring Cloud Stream 3.0.
beer -> notification
scotch -> notification
Каков наилучший способ активировать это?
Ответ №1:
Я бы предложил использовать что-то вроде этого (исходя из этого):
@Bean
public Function<Tuple2<Flux<String>, Flux<String>>, Flux<String>> beerAndScotch() {
return tuple -> {
Flux<String> beerStream = tuple.getT1().map(item -> item.toUpperCase());
Flux<String> scotchStream = tuple.getT2().map(item -> item.toUpperCase());
return Flux.merge(beerStream, scotchStream);
};
}
и поэтому ваше определение должно выглядеть примерно так:
spring:
cloud:
stream:
function:
definition: beerAndScotch
bindings:
notification:
destination: labron
beerAndScotch-in-0:
// ...
beerAndScotch-in-1:
// ...
beerAndScotch-out-0:
destination: labron
Таким образом, как входные данные beer
, так и входные данные для scotch
отправки labron
Комментарии:
1. 1 к @orrab. Просто хотел кое-что добавить. Если вы не хотите использовать реактивный подход, вы все равно можете сделать это с помощью своей первоначальной настройки. Все, что вам нужно, это сопоставить выходные привязки функций с одним и тем же местом назначения с помощью
...function.bindings...
свойства. Например,spring.cloud.stream.function.bindings.scotch-out-0=notification
иspring.cloud.stream.function.bindings.beer-out-0=notification
. Подробнее об этом здесь