【发布时间】:2014-12-12 20:25:40
【问题描述】:
我有一个异步网关,其中定义了一个异步执行器和一个错误通道。还有一个处理异常的服务激活器。
<int:gateway id="myGateway"
service-interface="me.myGateway"
default-request-channel="requestChannel"
async-executor="taskScheduler"
error-channel="errorChannel"/>
<int:service-activator ref="errorChannelMessageHandler" method="handleFailedInvocation"
input-channel="errorChannel"/>
public interface MyGateway {
Future<Object> send(Message message);
}
@Component
public class ErrorChannelMessageHandler {
@ServiceActivator
public Object handleFailedInvocation(MessagingException exception) {
// do some stuff here
return null;
}
}
当抛出异常时,线程阻塞,等待网关创建的临时回复通道上的回复。
如何防止线程阻塞以及何时引发异常以让错误通道服务激活器处理消息并执行一些自定义逻辑?
后期编辑: 我正在使用 SI 3.0.3.RELEASE 当为网关定义错误通道时,如果发生异常,它将调用此行(来自 MessagingGatewaySupport 的没有 250)errorFlowReply = this.messagingTemplate.sendAndReceive(this.errorChannel, errorMessage),它将执行在新创建的临时回复通道上阻止接收(来自 MessagingTemplate 的第 352-367 行)。我的错误通道的服务激活器是否负责在这个新创建的临时通道上发布消息,因此线程不会阻塞接收?
【问题讨论】:
标签: spring-integration asynchronous