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

当Apache Camel FTP路由出现连接错误时,如何关闭并抛出异常?

濮阳翔
2023-03-14

我有以下Apache Camel FTP文件下载路径:

        from(downloadUri)
            .routeId(routeId)
            .aggregate(new CustomListAggregationStrategy())
            .constant(true)
            .completionFromBatchConsumer()
            .to("direct:" + routeDestinationId);

我将此路由添加到上下文,然后使用ConsumerTemplate请求数据:

List<ResultType> result = consumerTemplate.receiveBody(CAMEL_DIRECT_OBJECT_PREFIX
                        + routeId, List.class);

当出现连接错误时(例如,未知的主机、无法到达的主机),我想关闭路由,并在“receiveBody”行后抛出一个异常,在那里我试图读取下载的文件。

我该怎么做呢?

我为路由尝试了一个onException-handler,在其中添加了一个流程块,并调用了exchange.getContext()。stop();在那个处理块中。但是应用程序一直在运行。

共有1个答案

厍胤运
2023-03-14

在路由现有消息的过程中停止路由有点棘手。原因是骆驼会优雅地关闭你要停的路线。如果您在消息被路由时这样做,正常关机将尝试等待消息被处理。

您可以在这里找到更多信息:https://camel . Apache . org/manual/FAQ/how-can-I-stop-a-route-from-a-route . html

 类似资料:
  • 我实现了自定义GatewayFilterFactory来实现自定义安全性。我观察到网关和远程服务器之间的连接突然关闭时出现间歇性问题。 Spring cloud gateway吞咽异常并向客户端抛出500个内部服务器错误。 完全堆栈跟踪- 示例实现- 以下查询的任何建议- 如何确保netty将连接/握手错误转发到客户端,而不是抛出500个内部服务器错误? 如何重新建立关闭的连接?

  • 我正在使用mybatis连接到Oracle。 我的mybatis配置是: 我的开放会话代码就像 由于类的应用范围,而sqlSession不能在应用范围内使用,所以我必须自己管理sqlSession。 2019-04-11 15:30:41,861信息[stdout](默认任务-57)声称连接过期962608913。 2019-04-11 15:30:41,861信息[stdout](默认任务-57

  • 根据问题我得到输入为"/分裂/名称?FullName=ritik verma",我必须把它分成名字和姓氏,第二部分是"/计算/年龄?dob=17-04-1999"和我需要计算年龄。 所以我给你一个实际的问题也许这会有帮助 问题是:- 创建具有以下路由并在端口3000上运行的Express应用程序- 路由1-GET /split/name-它将fullName作为查询参数,并将firstName和l

  • 我的代码如下。 异常发生在下面给出的第二行。 异常是什么意思?我的代码有什么问题? 由Girish编辑 listener.ora文件: tnsnames.ora 文件: 在上面的示例中,给出了tnsnames.ora和listener.ora文件的内容。

  • 我在服务器上托管了一个spring应用程序(Tomcat 8.5)。如果没有人使用它,它就会闲置。我已经知道,如果数据库处于空闲状态8小时(MySQL的默认超时),就会发生超时。正如在Spring Autoreconnect and Connection lost过夜帖子中提到的,我已经尝试了这里提供的解决方案。我尝试过配置应用程序。但这并不能解决问题。 (PS:除了Spring应用程序中的app

  • 原因:组件组织。neo4j。内核impl。交易XaDataSourceManager@2a792260'已成功初始化,但无法启动。请参阅随附的原因例外。 CausedBy:组件org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource@23d7c3d2已成功初始化,但无法启动。请参阅附件中的原因异常。 原因:没有架构索引提供程序组织。neo4j。内核应