Привет всем и специально команде Spring!
Как я могу передать функцию spring-cloud с помощью cloud-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-cloud-streamа также: Оболочки для @Beans типа Function, Consumer и Supplier, выставляющие их внешнему миру в качестве конечных точек HTTP и / или слушателей / издателей потока сообщений с RabbitMQ, Kafka и т. д., но я не могу понять, как?
На данный момент, к сожалению, я могу только вручную публиковать сообщения в связыватель spring-cloud-stream, используя Source , см. Пример здесь , но это, конечно, то, что я хочу знать, если можно избежатьс весной, волшебным образом ...
Может кто-нибудь сказать мне (может быть, Гари Рассел, Дейв Сойер, Артем Билан, Олег Жураковский или кто-нибудь еще, кто знает): что я пропустил и как я должен настроить свое приложение иликакие реквизиты я должен добавить в мои application.properties и т. д.?
Спасибо!
С уважением, Максим