Нам, вероятно, нужно изменить раздел, на который вы ссылаетесь, так как он несколько устарел.
Кроме того, мы не можем (не должны) выполнять какие-либо виды маршрутизации на основе типа полезной нагрузки, поскольку данные приходит от провода в сериализованной форме, такой как byte[]
. Я подробно обсуждаю это в этом старом посте . Но вы определенно можете использовать другие части входящего сообщения в качестве условия маршрутизации. Рекомендуется использовать заголовки сообщений.
Итак, давайте рассмотрим пример:
@Bean
public Function<String, String> uppercase() {
return v -> v.toUpperCase();
}
@Bean
public Function<String, String> lowercase() {
return v -> v.toLowerCase();
}
@Bean
public Function<String, String> reverse() {
return v -> new StringBuilder(v).reverse().toString();
}
. , .и действительно одно routing-expression
свойство. Вам нужно только одно выражение, так как каким бы сложным или простым ваше условие ни было, оно может быть закодировано стандартным Spring SpEL
--spring.cloud.function.routing-expression=headers['type'] == 'upper' ? 'uppercase' : (headers['type'] == 'lower' ? 'lowercase' : ''reverse)
Что произойдет, будет оценен заголовок входящего сообщения с именем type
. И если его значение равно 'upper', оно будет go преобразовано в функцию "uppercase"; если функция «нижний» до «строчной» и значение по умолчанию «обратный».
Надеюсь, это поможет.