java-使用PollableChannel时的Spring集成错误通道
作者:互联网
我们在我的应用程序中使用Spring集成.我想将一些对象放入通道中以进行异步处理和错误处理.因此,为此,我为MessageGateway配置了错误通道和PollableChannel来处理要处理的对象.
问题
所以我在调用messageGateway.processMessage(message)将消息放入通道.这按预期方式工作-调用此方法是非阻塞的,消息将得到处理并转发到下一个通道.但是当处理方法引发异常时,它不会重定向到错误通道.
另一方面,当我将处理通道从PollableChannel更改为SubscribableChannel时,错误通道按预期工作,但是调用网关当然会阻塞.我想念什么?我可以同时拥有非阻塞呼叫和错误通道吗?
编码
进行消息处理的组件:
@Component
public MessageProcessor {
@Transactional
@ServiceActivator(inputChannel = "msg.process", outputChannel = "msg.postprocess")
public void processMessage(MyMessage message) {
// Message processing that may throw exception
}
}
频道定义:
@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中),网关不添加错误通道标头,因此我们有changed that.
同时,您可以使用标头增强器将errorChannel标头设置为您的错误通道.您还可以在@MessagingGateway上使用defaultHeaders属性-请参见this answer上的注释.
标签:java,spring-integration 来源: https://codeday.me/bug/20191118/2024852.html