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

避免异常到达先前的IntegrationFlow

萧光华
2023-03-14
@Bean
public IntegrationFlow csvLineFlowDefinition() {
    return IntegrationFlows.from(CHANNEL_NAME)
            .filter(String.class, m -> {
                // filter to remove column definition csv line
                return !m.startsWith("ID");
            })
            .<String, MyPrettyObject>transform(csvLinePayload -> {
                String[] array = csvLinePayload.split(",");

                MyPrettyObject myPrettyObject = new MyPrettyObject();
                myPrettyObject.setId(array[0]);
                myPrettyObject.setType(array[1]);

                return myPrettyObject;
            })
            .<MyPrettyObject, String>route(myPrettyObject -> myPrettyObject.getType(),
                    routeResult -> routeResult
                            .channelMapping("AA", "AA_CHANNEL")
                            .channelMapping("BB", "BB_CHANNEL")
                            .channelMapping("CC", "CC_CHANNEL"))
            .get();
}

我尝试为转换器插入ExpressionEvaluatingRequestHandlerAdvise,但我不确定如何正确使用它,消息没有到达路由器或ERROR_CHANNEL_NAME

@Bean
public ExpressionEvaluatingRequestHandlerAdvice csvLineTransformerAdvice() {
    ExpressionEvaluatingRequestHandlerAdvice expressionEvaluatingRequestHandlerAdvice = new ExpressionEvaluatingRequestHandlerAdvice();
    expressionEvaluatingRequestHandlerAdvice.setFailureChannelName(ERROR_CHANNEL_NAME);
    expressionEvaluatingRequestHandlerAdvice.setTrapException(true);
    return expressionEvaluatingRequestHandlerAdvice;
}

.<String, MyPrettyObject>transform(csvLinePayload -> {
                String[] array = csvLinePayload.split(",");

                MyPrettyObject myPrettyObject = new MyPrettyObject();
                myPrettyObject.setId(array[0]);
                myPrettyObject.setType(array[1]);

                return myPrettyObject;
            }, t -> t.advice(csvLineTransformerAdvice()))

共有1个答案

段干子晋
2023-03-14

我担心“阅读有问题”没有到达错误通道,因为还没有消息要处理。因此,将入站通道适配器与流的其余部分隔离可能不是一个好主意。对于任何下行错误传播到入站通道适配器上的错误通道来说,这是非常正常的。

ExpressionEvaluatingRequestHandlerAdvise是正确的方法,但是您应该记住,它只适用于Transformer。该建议已经不涉及下游流。

在发生错误的情况下,流停止,并且由于错误,它真的无法到达下一个endpoint。不知道你在担心什么...

 类似资料:
  • 从C#开始,当我使用RX并且有背压时,项目会不断地添加到内部队列中,直到应用程序运行内存溢出(据我所知)。 在ReactiveX(RXJava)中,似乎他们采取了不同的立场,在背压开始构建时抛出异常。 这意味着我必须使用类似于onBackpressureBuffer()和在调用时传入一个

  • 本文向大家介绍Java中避免空指针异常的方法,包括了Java中避免空指针异常的方法的使用技巧和注意事项,需要的朋友参考一下 没人会喜欢空指针异常!有什么方法可以避免它们吗?或许吧。。 本文将讨论到以下几种技术 1.Optional类型(Java 8中新引入的) 2.Objects类(Java 7中原有的) Java 8中的Optional类 它是什么? 1.Java 8中新引入的类型 2.它是作为

  • 不要发表无目的的文章 在线项目中一个常见的陷阱是认为你需要回复所有的东西。你不必如此。首先,一般会有太多你无法同时跟踪的线索,至少是经过它开始的几个月后。其次,即使你已经决定参与,人们说的大多数话都无需回应。开发论坛都会不同程度的由下列三类信息占据: 提出重要事物的信息 提出对他人曾经说过的话表示支持或反对的信息 总结信息 上述信息并不是必定需要一个回应,特别是当你根据到目前为止的线索,很确定其他

  • 我正在尝试正确地使用ByteBuffer和BigEndian字节顺序格式。。 我有几个字段,我试图把它存储在Cassandra数据库之前放在一个单一的ByteBuffer中。 我将要写入Cassandra的字节数组由三个字节数组组成,如下所述- 现在,我需要快速压缩attributeValue数据,然后再将其存储在Cassandra中- 现在,我将编写,和snappy压缩的一起组成一个单字节数组,

  • 我试图插入一些文档,以上限集合使用此代码片段: 这意味着——重写文档。我插入的新文档中有一个字段,而不是旧文档,因为capped collection不允许用另一个大小更新现有文档。因为我遇到了一个例外:无法更改封顶集合中文档的大小。 老医生看起来像: 新版本如下: 这段代码运行良好,但过了一段时间(在插入过程中),我不断收到一个错误: 正如我正确理解的,错误出现在行中(可能只是格式问题): 我研

  • 问题内容: 一旦我的代码进入我的循环,它就会生成is close异常。是什么导致此异常,我该如何纠正? 编辑: 我在代码中注意到我与另一个嵌套循环,两个结果集都来自同一数据库,这是一个问题吗? 问题答案: 听起来好像您在遍历第一个语句的结果集之前在同一连接中执行了另一个语句。如果要嵌套处理来自同一数据库的两个结果集,则说明您做错了什么。这些集合的组合应在数据库侧完成。