gpt4 book ai didi

spring-integration - 带有错误 channel 的 Spring Integration 异步网关导致线程停顿

转载 作者:行者123 更新时间:2023-12-02 03:21:31 25 4
gpt4 key购买 nike

我有一个带有异步执行器和定义的错误 channel 的异步网关。还有一个处理异常的服务激活器。

<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;
}
}

当抛出异常时,线程会阻塞,等待网关创建的临时回复 channel 上的回复。

如何防止线程阻塞以及抛出异常时如何让错误 channel 服务激活器处理消息并执行一些自定义逻辑?

稍后编辑:我正在使用 SI 3.0.3.RELEASE当为网关定义错误 channel 时,如果发生异常,它将调用此行(来自 MessagingGatewaySupport 的 no 250)errorFlowReply = this.messagingTemplate.sendAndReceive(this.errorChannel, errorMessage),这将执行阻止在新创建的临时回复 channel 上接收(MessagingTemplate 中的第 352-367 行)。我的错误 channel 服务激活器是否负责在这个新创建的临时 channel 上发布消息,以便线程不会在接收时阻塞?

最佳答案

删除错误 channel ,以便将原始异常添加到 Future 中,以便 get() 能够传播它。

如果您想对错误流执行某些操作,请从错误流中引发异常,以便它在 Future 中可用,或者将 reply-timeout 设置为 0。但是,在这种情况下,您的 Future 将永远不会获得值或异常。

关于spring-integration - 带有错误 channel 的 Spring Integration 异步网关导致线程停顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421869/

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