使用控制总线发送消息时,为什么弹簧集成的errorChannel中没有捕获异常

时间:2019-05-27 10:53:59

标签: spring-integration

我有一个spring集成消息存储在数据库中。此消息是在发生异常并被errorChannel捕获后存储的。

现在,当我尝试使用控制总线重播此消息时,如果发生异常,我会在日志中看到错误,但errorChannel不会捕获任何异常。

这是我使用的代码:

    @Qualifier("control-bus.replay.channel")
    MessageChannel controlBus;

    public void redo(Message<?> msg){
      controlBus.send(
      MessageBuilder.withPayload(
      "@mybean.transform(headers['myMessage'])") 
      .setHeader("myMessage", msg).build());
   }

我试图在邮件的标题中添加errorChannel,但是没有用。

所以我想知道这是否是控制总线的默认行为,以及如何覆盖它。

1 个答案:

答案 0 :(得分:0)

与控制总线本身无关。这是您用来发送邮件的Get-WebConfigurationProperty -pspath $mypspath ` -filter $myfilter ` -name $myname 类型所决定的行为。

默认情况下,使用$GetWebConfigPropertyParams = @{ PSPath = $mypspath Filter = $myfilter Name = $myname } Get-WebConfigProperty @GetWebConfigPropertyParams 连接端点。当您直接向该通道发送消息时(如您在代码段中所做的那样),该异常将直接引发给该调用者,而忽略所有可能的错误处理配置。假设您执行常规Java调用堆栈而没有任何线程移位。因此,异常只是抛出给您。 当然,如果您在该通道上的整个流程是直接的,那将很好地工作:在它们之间没有任何队列或执行程序通道配置。

从这里很高兴看到您的MessageChannel和控制总线配置。