Всем привет и особенно весеннему коллективу!
Как я могу конвейерную функцию Spring-Cloud с Spring-Cloud-Stream в стиле функциональной модели программирования Bean?
Например, у меня есть pom.xml с обеими зависимостями:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-webflux</artifactId>
</dependency>
и скажем, я хотел бы сделать следующее:
- отправить через строку полезной нагрузки http с помощью функции spring -cloud (webflux)
- прописные буквы с помощью моей функции toUpperCase
- и, наконец, отправьте в мой конвейер для установленного связывателя (kafka / rabbit / test-binder)
поэтому я ожидаю реализовать это так:
@Log4j2
@SpringBootApplication
public class SpringCloudFunctionStreamApplication {
/**
* can I sent result of that function to my broker without any
* explicitly defined output.send(...) execution?
*/
@Bean
public Function<String, String> toUpperCase() {
return arg -> {
var res = arg.toUpperCase();
log.info("toUpperCase: {}", res);
return res;
};
}
public static void main(String[] args) {
SpringApplication.run(
SpringCloudFunctionStreamApplication.class,
"--spring.cloud.function.definition=toUpperCase",
"--spring.cloud.stream.function.definition=toUpperCase"
);
}
}
поэтому, когда я использую HTTPie для отправки полезной нагрузки, например:
echo 'hello' | http :8080/toUpperCase
spring-cloud-function, похоже, работает нормально, и я вижу ожидаемый журнал:
2019-06-09 21:20:36.978 ...SpringCloudFunctionStreamApplication : toUpperCase: hello
то же самое, если я публикую сообщение через веб-интерфейс управления rabbitmq, но как я могу конвейерно от одного к другому
Итак, мой вопрос связан с в соответствии с Spring документация, в которой говорится, что я также могу использовать spring-cloud-stream: Оболочки для @Beans типа Function, Consumer и Supplier, выставляя их внешнему миру как конечные точки HTTP и / или прослушиватели / издатели потока сообщений с RabbitMQ, Kafka и т. д., но я не могу понять, как?
На данный момент, к сожалению, я могу только вручную опубликовать сообщение в связывателе spring-cloud-stream с помощью Source см. пример здесь, но, конечно, я хочу знать, можно ли волшебным образом избежать с помощью Spring. ..
Кто-нибудь, пожалуйста, скажите мне (может быть, Гэри Рассел, Дэйв Сойер, Артем Билан, Олег Жураковский или кто-нибудь еще, кто знает): что я пропустил и как мне настроить свое приложение или какие реквизиты я должен добавить в свои application.properties и т. Д.?
Спасибо!
С уважением, Максим
http -> function(s) -> rabbit
поправить? - person Oleg Zhurakousky   schedule 10.06.2019