集成流程设计建议

时间:2019-01-28 15:28:50

标签: spring-integration spring-integration-dsl

我计划实施以下集成流程:

IntegrationFlows.from(httpInboundGateway)
    .transform(transformer-rest-api-1)
    .transform(transformer-rest-api-2)
    .handle(jdbc-outbound)
    .handle(http-outbound-gateway-1)
    .get(); 

我要满足的要求是:

  1. 使其尽可能在并行线程中运行
  2. 在每个端点持续发送消息
  3. 将端点作为rest-api(以使流可扩展)

使流动具有反应性有意义吗?如果是这样,该怎么办?如何在每个步骤登录? (窃听有帮助吗?),最后,能否请您提供java dsl中上述简单实现的具体示例?

1 个答案:

答案 0 :(得分:0)

  1. 要使其平行,您需要考虑在端点之间使用ExecutorChannel

    IntegrationFlows.from(httpInboundGateway)
       .channel(c -> c.executor(myTaskExecutor()))
       .transform(transformer-rest-api-1)
    

以此类推。

  1. 但是,由于您希望使用持久性选项,因此需要考虑将QueueChannel与持久性MessageStorehttps://docs.spring.io/spring-integration/docs/current/reference/html/system-management-chapter.html#message-store一起使用。 然后,必须为每个端点提供 poller 选项,包括用于并行处理的tasExecutor

    .channel(c -> c.queue(jdbcMessageStore(), "queue1Channel"))
           .transform(transformer-rest-api-1, 
                         e -> e.poller(p -> p.fixedDelay(100).taskExecutor(myTaskExecutor())))
    
  2. 要将端点设置为REST API,您只需使用Http.outboundGateway()。 或对于反应式变量-WebFlux.outboundGateway()中的.handle()而不是transform()。或者只是继续使用现有的.handle(http-outbound-gateway-1)

  3. 要使流程具有反应性,您需要使用.channel(c -> c.flux())),但是您对此问题将失去持久性。

  4. 要记录每个步骤,请在端点之间放置一个.log()运算符。

  5. 您不清楚要分享一些示例的要求...