Spring Cloud功能Webflux + Spring Cloud Stream是否与http源集成

时间:2019-03-27 00:49:15

标签: spring-webflux spring-cloud-stream spring-cloud-function

我正在尝试将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-function/1.0.0.RELEASE/single/spring-cloud-function.html

从云流中,我可以看到源需要定义为 供应商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的方法从邮政到具有弹簧云功能的卡夫卡?

1 个答案:

答案 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());
     };
  }
}