对于最新稳定版本,请使用 spring-cloud-function 5.0.0spring-doc.cadn.net.cn

Spring积分交互

Spring 集成框架扩展了 Spring 编程模型,以支持著名的企业集成模式。 它支持基于 Spring 的应用中的轻量级消息传递,并支持通过声明式适配器与外部系统集成。 它还提供一个高级DSL,将各种作(端点)组合成逻辑集成流程。 在这种 DSL 配置的 lambda 风格下,Spring Integration 已经具备了良好的java.util.function接口的采用。 这@MessagingGateway代理接口也可以作为功能消费者根据 Spring Cloud Function 环境,可以注册到函数目录中。 关于其对函数的支持,请参见 Spring 集成参考手册中的更多信息。spring-doc.cadn.net.cn

另一方面,从版本开始4.0.3,春云函数引入了一个Spring-cloud-function-integration该模块提供更深入、更针对云端且基于自动配置的API,用于与功能目录从Spring Integration DSL的角度来看。 这FunctionFlowBuilder是自动配置并自动布线的功能目录代表针对目标功能特定DSL的入口集成流程实例。 除了标准IntegrationFlow.from()工厂(方便起见),FunctionFlowBuilder揭露了fromSupplier(字符串 supplierDefinition)工厂查询目标提供商在提供的功能目录. 然后就是这样FunctionFlowBuilder导致FunctionFlowDefinition. 这FunctionFlowDefinition集成流扩展并揭露apply(String functionDefinition)accept(字符串 consumerDefinition)查找操作员功能消费者来自功能目录分别。 更多信息请查看他们的Javadocs。spring-doc.cadn.net.cn

以下示例展示了FunctionFlowBuilder与其他力量并行运作集成流程应用程序接口:spring-doc.cadn.net.cn

@Configuration
public class IntegrationConfiguration {

    @Bean
    Supplier<byte[]> simpleByteArraySupplier() {
        return "simple test data"::getBytes;
    }

    @Bean
    Function<String, String> upperCaseFunction() {
        return String::toUpperCase;
    }

    @Bean
    BlockingQueue<String> results() {
        return new LinkedBlockingQueue<>();
    }

    @Bean
    Consumer<String> simpleStringConsumer(BlockingQueue<String> results) {
        return results::add;
    }

    @Bean
    QueueChannel wireTapChannel() {
        return new QueueChannel();
    }

    @Bean
    IntegrationFlow someFunctionFlow(FunctionFlowBuilder functionFlowBuilder) {
        return functionFlowBuilder
                .fromSupplier("simpleByteArraySupplier")
                .wireTap("wireTapChannel")
                .apply("upperCaseFunction")
                .log(LoggingHandler.Level.WARN)
                .accept("simpleStringConsumer");
    }

}

自从......FunctionCatalog.lookup()功能不仅限于简单的函数名称,函数组合功能也可以用于上述应用()accept()运营商:spring-doc.cadn.net.cn

@Bean
IntegrationFlow functionCompositionFlow(FunctionFlowBuilder functionFlowBuilder) {
    return functionFlowBuilder
            .from("functionCompositionInput")
            .accept("upperCaseFunction|simpleStringConsumer");
}

当我们在Spring Cloud应用中加入预定义函数的自动配置依赖时,这个API变得更加重要。 例如,Stream Applications 项目除了应用镜像外,还为各种集成用例提供带有功能的工件,例如Debezium-提供商,ElasticSearch-消费者,聚合函数等。spring-doc.cadn.net.cn

以下配置基于http-提供商,spel-function文件消费者分别:spring-doc.cadn.net.cn

@Bean
IntegrationFlow someFunctionFlow(FunctionFlowBuilder functionFlowBuilder) {
    return functionFlowBuilder
            .fromSupplier("httpSupplier", e -> e.poller(Pollers.trigger(new OnlyOnceTrigger())))
            .<Flux<?>>handle((fluxPayload, headers) -> fluxPayload, e -> e.async(true))
            .channel(c -> c.flux())
            .apply("spelFunction")
            .<String, String>transform(String::toUpperCase)
            .accept("fileConsumer");
}

否则我们只需要把他们的配置加到一个application.properties(如有必要):spring-doc.cadn.net.cn

http.path-pattern=/testPath
spel.function.expression=new String(payload)
file.consumer.name=test-data.txt