You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Camel SupervisingRouteController未监控全部路由的问题排查

问题原因

这种差异的核心在于多路由一次性添加时的异常传播逻辑、SupervisingRouteController的生效阶段,以及Smpp组件的启动行为:

  1. 多路由批量添加的异常中断
    当你通过context.addRoutes()一次性添加两个路由时,Camel会按顺序启动它们:

    • 若第一个路由(fromrequestto0)因SMS-C宕机启动失败,Smpp组件会抛出致命启动异常,直接中断整个addRoutes流程。尽管你捕获了addRoutes的异常,但CamelContext内部已因该致命异常进入不可恢复状态,最终触发Spring Boot应用关闭。
    • 若第一个路由启动成功,第二个路由(fromresponseto1)启动失败,此时addRoutes已完成部分路由注册,CamelContext处于正常运行状态。SupervisingRouteController会检测到该路由启动失败,按照配置的重试策略自动重试。
  2. SupervisingRouteController的接管条件
    该控制器仅对已成功注册到CamelContext的路由生效,负责监控其启动与运行状态。但在批量添加路由时,第一个路由的启动失败会直接中断注册流程,第二个路由根本没机会被注册,自然无法被控制器接管。只有当路由完成注册后,控制器才能处理其启动失败的情况。

  3. Smpp组件的即时连接特性
    Smpp端点默认在路由启动时立即尝试建立与SMS-C的连接,连接失败会直接导致路由启动失败。这种即时校验在批量添加场景下会引发连锁反应,而拆分添加或延迟连接则可以避免这个问题。

解决方法

  1. 拆分路由添加操作
    不要一次性添加多个路由,改为逐个添加,确保每个路由都能完成注册并被控制器监控:

    try {
        // 单独添加第一个路由
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("timer:/foo?repeatCount=1")
                    .routeId("fromrequestto0")
                    .to("smpp://localhost:2775");
            }
        });
        // 单独添加第二个路由
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("timer:/foo2?repeatCount=1")
                    .routeId("fromresponseto1")
                    .to("smpp://localhost:2776");
            }
        });
    } catch (Exception e) {
        // 记录异常,避免吞掉关键信息
        log.error("路由添加失败", e);
    }
    
  2. 启用Smpp端点的延迟连接
    给Smpp端点添加lazyStartProducer=true参数,让生产者在第一次发送消息时才尝试建立连接,避免路由启动时因连接失败导致的异常:

    from("timer:/foo?repeatCount=1")
        .routeId("fromrequestto0")
        .to("smpp://localhost:2775?lazyStartProducer=true");
    

    这样路由可以正常启动,后续连接失败会被SupervisingRouteController捕获并触发重试。

内容的提问来源于stack exchange,提问作者simonalexander2005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:25:55