编程语言
首页 > 编程语言> > java-使用PollableChannel时的Spring集成错误通道

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