我正在尝试将Spring cloud stream与spring cloud功能webflux集成
因为它们在将来的版本中不赞成使用Spring Cloud反应流,所以我尝试使用Spring Cloud函数 https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.2.RELEASE/single/spring-cloud-stream.html#spring-cloud-stream-preface-notable-deprecations
Spring cloud Web函数可以使用文档中的路径公开其函数的终点
从云流中,我可以看到源需要定义为 供应商https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.2.RELEASE/single/spring-cloud-stream.html#_spring_cloud_function
但是我的用例是从反应式HTTP端点获取POST数据并将其吸收到kafka中,有什么方法可以通过spring cloud功能web和spring cloud流实现吗?
具有弹簧云流的弹簧云功能文档
@SpringBootApplication
@EnableBinding(Source.class)
public static class SourceFromSupplier {
public static void main(String[] args) {
SpringApplication.run(SourceFromSupplier.class, "--spring.cloud.stream.function.definition=date");
}
@Bean
public Supplier<Date> date() {
return () -> new Date(12345L);
}
}
如果我运行此命令,我可以看到日期每隔1秒钟插入一次kafka,并且如果我调用供应商的get端点(如localhost:/ 8080 / date)导致日期响应,是否有注入Paylaod的方法从邮政到具有弹簧云功能的卡夫卡?
答案 0 :(得分:1)
您的问题帮助发现了一个问题,这与功能和流提供的自动配置之间的生命周期不一致有关。该问题以Spring Cloud Functions创建的其余点无法看到绑定的方式表现出来,因为它是在更早创建的
因此我们将尽快解决此问题。同时,有一种解决方法需要您从ApplicationContext访问output
通道(见下文):
@SpringBootApplication
@EnableBinding(Source.class)
public class SimpleFunctionRabbitDemoApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(SimpleFunctionRabbitDemoApplication.class);
}
@Bean
public Consumer<String> storeSync(ApplicationContext context) {
return v -> {
MessageChannel channel = context.getBean(Source.OUTPUT, MessageChannel.class);
channel.send(MessageBuilder.withPayload(v).build());
};
}
}