gpt4 book ai didi

java - 使用 PollableChannel 时的 Spring 集成错误 channel

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:00 27 4
gpt4 key购买 nike

我们在我的应用程序中使用 Spring 集成。我想将一些对象放入 channel 中以进行异步处理和错误处理。因此,为此,我配置了带有错误 channel 的 MessageGateway 和用于处理要处理的对象的 PollableChannel

问题

所以我正在调用 messageGateway.processMessage(message) 将消息放入 channel 。这按预期工作 - 调用此方法是非阻塞的,消息得到处理并转发到下一个 channel 。但是当处理方法抛出异常时,它不会被重定向到错误 channel 。

另一方面,当我将处理 channel 从 PollableChannel 更改为 SubscribableChannel 时,错误 channel 按预期工作,但调用网关当然是阻塞的。我错过了什么?我可以同时拥有非阻塞调用和错误 channel 吗?

代码

执行消息处理的组件:

@Component
public MessageProcessor {

@Transactional
@ServiceActivator(inputChannel = "msg.process", outputChannel = "msg.postprocess")
public void processMessage(MyMessage message) {
// Message processing that may throw exception
}
}

channel 定义:

@Configuration
public class IntegrationConfig {

@Bean(name = "msg.process")
private MessageChannel processChannel() {
return new RendezvousChannel();
}

@Bean(name = "msg.error")
private MessageChannel errorChannel() {
return new DirectChannel();
}
}

我的网关是这样的:

@MessagingGateway(errorChannel = "msg.error")
public interface MessagingGateway {

@Gateway(requestChannel = "msg.processing")
void processMessage(MyMessage message);
}

错误处理程序:

@Component
public ErrorHandlers {

@Transactional
@ServiceActivator(inputChannel = "msg.error")
public void processError(MessagingException me) {
// Error handling is here
}
}

最佳答案

But when processing method throws an exception, it is not redirected to error channel.

当网关方法返回 void 时,调用线程在返回到网关时立即被释放。

在这种情况下(在下一版本 - 5.0 中)网关不会添加错误 channel header ,我们有 changed that .

与此同时,您可以使用 header 丰富器将 errorChannel header 设置为您的错误 channel 。您还可以使用 @MessagingGateway 上的 defaultHeaders 属性 - 请参阅 this answer 上的评论.

关于java - 使用 PollableChannel 时的 Spring 集成错误 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375679/

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