【问题标题】:Spring integration flow vs regular service and adapterSpring 集成流程与常规服务和适配器
【发布时间】:2017-03-14 00:01:56
【问题描述】:

我有一些具有 SOAP 服务的遗留代码。现在我正在为一些可能调用一个或多个 SOAP 操作的对象构建 Rest API。我正在研究 Spring Integration。来自docs

除了将细粒度的组件连接在一起之外,Spring Integration 还提供了多种通道适配器和网关来与外部系统进行通信。

以上陈述听起来很诱人。我正在编写休息微服务控制器、验证服务、对 SOAP 请求映射器和 SOAP 客户端的休息请求。在某些情况下,当有多个调用时,我必须编写更多代码,而且在很多情况下我确实编写了代码。

Spring Integration 看起来像是一个面向异步消息的框架。我的问题是调用需要或多或少是同步调用,性能至关重要。有没有人使用Spring integration 解决这个问题,你能分享你的经验吗?

【问题讨论】:

    标签: java spring soap spring-boot spring-integration


    【解决方案1】:

    为了补充 Artem 的 answer,值得注意的是,如果您要使用 Spring Integration DSL 之一(Java、Groovy 或 Scala),那么(同步的)DirectChannel 将默认情况下,Spring Integration 会选择它来连接集成流的端点。这意味着只要您的端点保持同步并且您依赖它们之间的默认通道,整个集成流程也会保持同步。

    例如(Java DSL):

      @Bean
      public IntegrationFlow syncFlow() {
        return IntegrationFlows
            .from(/* get a REST message from microservice */)
            // here the DirectChannel is used by default 
            .filter(/* validate (and filter out) incorrect messages */)
            // here the DirectChannel is used by default too
            .transform(/* map REST to SOAP */)
            // guess what would be here?
            .handle(/* send a message with SOAP client */)
            .get();
      }
    

    这绝对不意味着您永远与同步流捆绑在一起。在任何步骤中,您都可以进行异步或并行。例如,如果您决定并行发送 SOAP 消息,您只需在调用 SOAP 客户端之前指定适当的通道:

      @Bean
      public IntegrationFlow syncFlow() {
            // ... the same as above ...
            .transform(/* map REST to SOAP */)
            .channel(c -> c.executor(Executors.newCachedThreadPool()))  // see (1)
            .handle(/* send a message with SOAP client */)
            .get();
      }
    

    (1) 从此时开始,由于使用了ExecutorChannel,下游流将被并行处理。

    请注意,消息端点也可能以异步方式运行depending on their logic

    我使用 Spring Integration 在我的家庭和工作项目中构建同步集成流,它被证明是一个非常强大且灵活的解决方案。

    【讨论】:

    • 感谢代码示例。我将作为我的启动板。
    【解决方案2】:

    Spring Integration 中的一等公民之一是MessageChannel 抽象。最简单、同步且因此直接的方法调用是DirectChannel

    不确定是什么让您认为 Spring Integration 中的一切都是异步的。实际上它总是直接的,除非你告诉它是异步的。

    【讨论】:

    • 谢谢。将调查 DirectChannel 的使用情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2011-08-29
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多