当前位置: 首页 > 知识库问答 >
问题:

Spring Integration Java DSL中ExecutorChannel错误通道的处理

连厉刚
2023-03-14

例如,在我的用例中,我有一个队列(大小为100以限制输入)供调用方发送事件,轮询器将轮询队列并发送到executorchannel以进行异步处理(假设处理是CPU密集型的,我们将任务执行器的池大小限制在2)。异步处理的结果将发回给调用方。此外,如果有异常抛出异步处理。原始调用方将处理异常,而不是让全局错误处理程序来处理它。

我不知道如何在Spring Integration Java DSL中指定一个只有调用方才能看到从ExecutorChannel抛出的错误并以私有方式处理的通道。

共有1个答案

长孙诚
2023-03-14

为此,您必须为某些messagechannel指定errorchannel标头,这完全取决于您的调用方。

ExecutorChannel基于MessagePublishingErrorHandler,其代码如下:

private MessageChannel resolveErrorChannel(Throwable t) {
    Message<?> failedMessage = (t instanceof MessagingException) ?
            ((MessagingException) t).getFailedMessage() : null;
    if (this.defaultErrorChannel == null && this.channelResolver != null) {
        this.defaultErrorChannel = this.channelResolver.resolveDestination(
                IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME);
    }

    if (failedMessage == null || failedMessage.getHeaders().getErrorChannel() == null) {
        return this.defaultErrorChannel;
    }
    Object errorChannelHeader = failedMessage.getHeaders().getErrorChannel();
    if (errorChannelHeader instanceof MessageChannel) {
        return (MessageChannel) errorChannelHeader;
    }
    Assert.isInstanceOf(String.class, errorChannelHeader,
            "Unsupported error channel header type. Expected MessageChannel or String, but actual type is [" +
            errorChannelHeader.getClass() + "]");
    return this.channelResolver.resolveDestination((String) errorChannelHeader);
}

注意包含failedmessage.getheaders().geterrorchannel()的部分。

 类似资料:
  • 场景可能是:我的期望可能是批量10个数据点,我想对{failed 5,pass 5}或其他什么给出响应。 我的逻辑是将批处理拆分为数据元素并进行验证 成功的验证将发送给aggreagtor, 失败的验证将抛出错误并通过错误通道拾取。 收件人列表路由器将错误通道作为输入通道,并连接2个过滤器,目的是过滤某些类型的错误直接发送响应(与用户输入无关的信息-服务器错误等),某些类型的客户端错误将转到聚合器

  • 作为我正在构建的应用程序的一部分,我正在使用csv-parse读取和操作大型(约5.5GB,800万行)csv文件。我让这个过程运行得相对平稳,但我被困在一个项目上——捕捉由不一致的列数引发的错误。 我之所以使用管道函数,是因为它与应用程序的其余部分配合得很好,但我的问题是,如何将解析器抛出的错误重定向到日志并允许该过程继续? 我认识到,我可以使用选项跳过列数不一致的记录,该选项几乎就足够了。问题

  • 问题内容: 当我在Go中编写函数时,它应该返回一个值和一个错误,例如 我想在goroutine中执行此createHashedPassword,我想通过通道传递数据。 但是我的问题是,如何在此处或goroutine中处理错误? 问题答案: 通常将多个输出捆绑到一个结构中,然后通过一个通道将它们一起返回。

  • 我正在尝试在javascript中自定义一个可以通过REST调用访问的endpoint。此终结点处理与不同情况相关的多个条件(基本上它生成一次性密码,然后验证它以检查它是否过期等)。 所以基本上结构是这样的: 我在开始时设置了一个对象,然后映射一个json消息,以便检索具有不同代码/消息响应的正文。因此,当终结点输入这些条件时,它将返回对象,并且 Header 始终为 200(调用成功)。像这样:

  • 问题内容: 解析器不知道要做什么时的默认行为是将消息打印到终端,例如: 第1:23行在“}”处缺少DECIMAL 这是一个很好的信息,但是在错误的位置。我宁愿将此作为例外。 我尝试使用,但是会抛出一个没有消息的消息(由引起,也没有消息)。 有什么办法可以让我通过异常报告错误,同时又保留消息中的有用信息? 这就是我真正想要的—我通常在规则中使用动作来构建对象: 然后,当我调用解析器时,我将执行以下操