我有一些拥有SOAP服务的遗留代码。现在我正在为一些可能调用一个或多个SOAP操作的对象构建Rest API。我正在研究Spring Integration。来自docs
除了将细粒度组件连接在一起外,Spring Integration还提供多种通道适配器和网关,以便与外部系统进行通信。
以上陈述听起来很诱人。我正在编写休息微服务控制器,验证服务,Rest请求到SOAP请求映射器和SOAP客户端。在某些情况下,当有多个调用时,我需要编写更多代码,并且在很多情况下我编写了代码。
高级别的 Spring Integration 看起来像是面向异步消息的框架。我的问题是呼叫需要或多或少是同步呼叫,性能至关重要。有没有人使用Spring integration
来解决这个问题,你可以分享一下你的经历吗?
答案 0 :(得分:3)
为了补充Artem的answer值得注意的是,如果您打算使用 Spring Integration DSL (Java,Groovy或Scala)之一(同步){{ Spring Integration将默认选择1}}来连接集成流的端点。这意味着只要您的端点保持同步并依赖它们之间的默认通道,整个集成流程也会保持同步。
例如(在Java DSL中):
DirectChannel
这绝对不意味着你永远与同步流程捆绑在一起。在任何步骤中,您都可以进行异步或并行。例如,如果您决定并行发送SOAP消息,那么您需要做的就是在SOAP客户端调用之前指定适当的通道:
@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();
}
(1)从这一点开始,由于使用了ExecutorChannel,下游流程将被并行处理。
请注意,邮件端点也可能异步depending on their logic。
我使用Spring Integration在我的家庭和工作项目中构建同步集成流程,并且它被证明是一个非常强大而灵活的解决方案。
答案 1 :(得分:1)
Spring Integration中的第一类公民之一是MessageChannel
抽象。最简单,同步且因此直接的方法调用是DirectChannel
。
不确定是什么让你认为Spring Integration中的所有内容都是异步的。实际上它总是直接的,除非你告诉你是异步的。