gpt4 book ai didi

java - Spring 集成流程与常规服务和适配器

转载 作者:行者123 更新时间:2023-11-30 06:49:22 24 4
gpt4 key购买 nike

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

In addition to wiring together fine-grained components, Spring Integration provides a wide selection of channel adapters and gateways to communicate with external systems.

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

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

最佳答案

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

例如(在 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 客户端之前指定适当的 channel :

  @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 在我的家庭和工作项目中构建同步集成流,事实证明它是一个非常强大而灵活的解决方案。

关于java - Spring 集成流程与常规服务和适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42775606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com