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

Apache Camel AHC-WS Websocket服务端意外断连后自动重连失败问题

问题根因

你配置的deadLetterChannel属于路由消息处理级别的错误处理器,仅对消息进入路由后,后续Filter、Process等节点抛出的异常生效。而Websocket连接意外断开属于AHC-WS消费者生命周期层面的连接异常,并不在普通错误处理器的管控范围内,因此你配置的10次重发规则不会作用于连接重建场景。
你看到的单次异常触发,只是连接断开时的事件通知,底层WSS连接已经被销毁,没有配套的重连逻辑自然无法恢复。

修复方案

直接在AHC-WSS消费者的URI参数中添加官方自带的自动重连配置即可,不需要额外自定义重连逻辑:

  • 新增autoReconnect=true开启连接断开自动重连能力
  • 新增maxReconnectAttempts=10配置最大重连次数
  • 新增reconnectDelay=1000配置首次重连等待时长(单位毫秒)
  • 新增reconnectBackOffMultiplier=2配置指数退避倍数,和你原有错误处理器的退避策略对齐

修改后的示例代码

errorHandler(deadLetterChannel("seda:dead")
    .maximumRedeliveries(10).useExponentialBackOff()
    .log("Route exception"));

// 新增自动重连相关参数
fromF("ahc-wss://some-url?bridgeErrorHandler=true&sendMessageOnError=true&autoReconnect=true&maxReconnectAttempts=10&reconnectDelay=1000&reconnectBackOffMultiplier=2")
    .filter(exchange -> exchange.getIn().getBody() != null)
    .process(exchange -> {
        String msg = (String) exchange.getIn().getBody();
        log.info("Message size: " + msg.length());
    })
    .log("test done");

版本兼容说明

如果你使用的Camel版本低于2.21,AHC-WS组件未内置自动重连参数,可以通过自定义路由监听器实现重连:捕获到连接断开的IOException后,调用Camel上下文的RouteController重启对应路由即可达到相同效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:54:02