Spring 集成 - 需要后端异步处理的 Web 服务网关立即响应
Spring integration - need immediate response from webservice gateway with asynchronous processing in backend
我们有一个要求,外部客户端调用我们的 spring 集成入站 Web 服务网关之一,我们需要立即以通用 OK 状态确认它们。同时,payload会被提交到一个channel进行异步处理,我们不需要response(会根据一些业务验证发送email)。
我们尝试使用异步网关和执行器通道(带任务执行器),但无法弄清楚如何让网关立即响应。在这两种情况下,它都作为一种单向网络服务工作,没有响应。
配置:
<context:component-scan base-package="com.myapp.springintegration" />
<channel id="helloWorldRequestChannel">
<dispatcher task-executor="taskExecutor"/>
</channel>
<channel id="helloWorldReplyChannel"/>
<task:executor id="taskExecutor" pool-size="2"/>
<gateway id="helloServiceGateway"
service-interface="com.myapp.springintegration.HelloService"
default-request-channel="helloWorldRequestChannel" default-reply-channel="helloWorldReplyChannel"/>
<service-activator input-channel="helloWorldRequestChannel" ref="helloServiceImpl" method="hello" />
我没有看到任何 <int-ws:inbound-gateway>
但要求可以这样实现:
<int-ws:inbound-gateway request-channel="requestChannel"/>
<int:recipient-list-router input-channel="requestChannel">
<int:recipient channel="response" />
<int:recipient channel="process" />
</int:recipient-list-router>
<int:transformer input-channel="response" expression="'OK'"/>
<int:channel id="process">
<int:dispatcher task-executor="testExecutor"/>
</int:channel>
您向 recipient-list-router
发送请求,它会将您的消息分发到另外两个频道。第一个(response
) 刚刚returns 简单的马上回复了WS。第二个 (process
) 将消息转移到单独的 Thread
,因此该频道的订阅者将在不阻塞 WS Thread
.
的情况下完成其工作
希望我清楚。
我们有一个要求,外部客户端调用我们的 spring 集成入站 Web 服务网关之一,我们需要立即以通用 OK 状态确认它们。同时,payload会被提交到一个channel进行异步处理,我们不需要response(会根据一些业务验证发送email)。
我们尝试使用异步网关和执行器通道(带任务执行器),但无法弄清楚如何让网关立即响应。在这两种情况下,它都作为一种单向网络服务工作,没有响应。
配置:
<context:component-scan base-package="com.myapp.springintegration" />
<channel id="helloWorldRequestChannel">
<dispatcher task-executor="taskExecutor"/>
</channel>
<channel id="helloWorldReplyChannel"/>
<task:executor id="taskExecutor" pool-size="2"/>
<gateway id="helloServiceGateway"
service-interface="com.myapp.springintegration.HelloService"
default-request-channel="helloWorldRequestChannel" default-reply-channel="helloWorldReplyChannel"/>
<service-activator input-channel="helloWorldRequestChannel" ref="helloServiceImpl" method="hello" />
我没有看到任何 <int-ws:inbound-gateway>
但要求可以这样实现:
<int-ws:inbound-gateway request-channel="requestChannel"/>
<int:recipient-list-router input-channel="requestChannel">
<int:recipient channel="response" />
<int:recipient channel="process" />
</int:recipient-list-router>
<int:transformer input-channel="response" expression="'OK'"/>
<int:channel id="process">
<int:dispatcher task-executor="testExecutor"/>
</int:channel>
您向 recipient-list-router
发送请求,它会将您的消息分发到另外两个频道。第一个(response
) 刚刚returns 简单的马上回复了WS。第二个 (process
) 将消息转移到单独的 Thread
,因此该频道的订阅者将在不阻塞 WS Thread
.
希望我清楚。