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

启用EMQX ExHook时econnrefused错误的排查与解决方法

EMQX ExHook 启动时 econnrefused 错误排查技巧

问题场景

使用EMQX 4.4.11,基于EMQX Java扩展SDK开发Hook插件,启动EMQX ExHook插件时出现连接拒绝错误,日志如下:

2022-12-15T09:14:32.374558+05:30 [error] [ExHook Svr] CALL emqx_exhook_v_1_hook_provider_client:on_provider_loaded(#{broker => #{datetime => "2022-12-15 09:14:32",sysdescr => "EMQ X Broker",uptime => "1 minutes, 1 seconds",version => "4.4.11"},meta => #{cluster_name => "emqxcl",node => <<"emqx@127.0.0.1">>,sysdescr => "EMQ X Broker",version => "4.4.11"}}, #{channel => "default",key_dispatch => <0.2007.0>,pool_size => 8,timeout => 5000}) error: econnrefused
2022-12-15T09:14:32.376430+05:30 [warning] Failed to reload exhook callback server "default", Reason: econnrefused

排查技巧

  • 确认Java Hook服务状态
    检查你的Java扩展服务是否成功启动,通过服务日志确认无启动异常。使用端口监听命令验证服务是否在指定端口监听:

    # Linux系统
    netstat -tulpn | grep <你的Java服务端口>
    # 或
    ss -tulpn | grep <你的Java服务端口>
    

    如果端口未被监听,说明Java服务未启动或启动失败,需排查服务启动失败原因(如依赖缺失、端口被占用)。

  • 核对EMQX ExHook配置
    打开EMQX的ExHook配置文件(etc/plugins/emqx_exhook.conf),检查exhook.default.url配置项,确保其地址、端口与Java Hook服务的监听地址完全一致。例如Java服务监听本地8081端口,配置应为http://127.0.0.1:8081,避免使用localhost可能带来的解析问题,优先使用明确IP。

  • 测试网络连通性
    在EMQX所在机器上,直接测试与Java服务的网络连通性:

    # 测试端口是否可达
    telnet <Java服务IP> <端口>
    # 或用curl测试服务接口(如果有健康检查接口)
    curl http://<Java服务IP>:<端口>/health
    

    若无法连通,需排查防火墙、安全组、iptables规则是否拦截了该端口,或两台机器(若跨部署)之间的网络是否正常。

  • 检查Java服务监听范围
    若EMQX与Java服务不在同一台机器,需确保Java服务的监听地址为0.0.0.0(允许所有IP访问)或对外可访问的IP,而非仅127.0.0.1(仅本地可访问)。

  • 查看Java服务详细日志
    检查Java服务的运行日志,排查是否存在初始化失败、依赖加载错误、端口被占用等异常,这些问题可能导致服务无法正常监听端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:27