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

避免异常到达先前的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压缩的一起组成一个单字节数组,

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

  • 问题内容: 在我日常的Web应用程序开发中,有许多情况需要我们从用户那里获取一些输入。 然后将这个数字输入传递给可能是应用程序的服务层或DAO层。 由于它是一个数字(整数或浮点数),在某个阶段,我们需要将其转换为整数,如以下代码片段所示。 在上述情况下,在这里,我必须检查输入是否不为null或是否没有输入(空白),或者有时是否有非数字输入的可能性,例如blah,test等。 处理此类情况的最佳方法