webhook测试连接不成功

环境1、Ubuntu 22.04.2 LTS x86_64 宝塔8.0.3 docker部署 emqx开源版5.3
环境2、Ubuntu 22.04.2 LTS x86_64 emqx开源版5.3下载安装
环境3、Alibaba Cloud Linux 3.2104 LTS 64位 等保2.0三级版 docker部署 emqx开源版5.3
HTTP 服务:emqx文档里的案例
from flask import Flask, json, request

api = Flask(name)

@api.route(‘/’, methods=[‘POST’])
def print_messages():
reply= {“result”: “ok”, “message”: “success”}
print("got post request: ", request.get_data())
return json.dumps(reply), 200

if name == ‘main’:
api.run()

该3个环境,webhook测试连接均不成功,400 TEST_FAILED,把简单HTTP服务部署到云服务器也一样。

1 个赞

:one: EMQX(Ubuntu Host / Docker Container) 和 Webhook Server 之间网络通么
:two: 尝试在 Ubuntu Host 上用 cURL 访问 Webhook 页面看看结果
:three: EMQX 的日志请提供下

刚才试了下
EMQX和Webhook Server 在同一个服务器上,外网可以访问Webhook Server,
EMQX:https://iot.zjbim.com:9210/#/webhook/create
Webhook Server:https://iot.zjbim.com:9203/ 浏览器访问返回:{“message”: “success”, “result”: “ok”}

日志:
2023-11-13T04:10:07.387647+00:00 [error] msg: http_connector_pmap_failed, mfa: emqx_bridge_http_connector:do_get_status/2(458), reason: timeout
2023-11-13T04:10:07.389357+00:00 [warning] msg: start_resource_failed, mfa: emqx_resource_manager:start_resource/2(495), id: <<“probe:69edc24c6b5164e5”>>, reason: timeout
2023-11-13T04:10:26.555580+00:00 [error] msg: http_connector_pmap_failed, mfa: emqx_bridge_http_connector:do_get_status/2(458), reason: timeout
2023-11-13T04:10:26.557356+00:00 [warning] msg: start_resource_failed, mfa: emqx_resource_manager:start_resource/2(495), id: <<“probe:d8ed320b9bdd3b0b”>>, reason: timeout
2023-11-13T04:10:46.673602+00:00 [error] msg: http_connector_pmap_failed, mfa: emqx_bridge_http_connector:do_get_status/2(458), reason: timeout
2023-11-13T04:10:46.675409+00:00 [warning] msg: start_resource_failed, mfa: emqx_resource_manager:start_resource/2(495), id: <<“probe:1fbeeb59cb831b27”>>, reason: timeout

EMQX和Webhook Server的端口也改成一致的了
EMQX管理面板:https://iot.zjbim.com:9210
Webhook Server:https://iot.zjbim.com:9210/fastapi/
问题依旧

首先确保 EMQX 和 Webhook Server 之间连接是通的:

  • 进入 docker 容器或用其他方式找到 emqx 可执行文件的目录
    使用 ./emqx remote_console 进入 EMQX Console 控制台
  • 执行函数 gen_tcp:connect(HOST, PORT, [binary, {active, true}]).
    将 HOST 及 PORT 替换为你的 webhook 的域名及端口,形式如下:

    注意不要漏掉最后的点: .
  • 如果返回类似 {ok, #Port<xx.xx>} 说明 EMQX 到 webhook server 的连接是通的。
  • 执行 gen_tcp:close(#Port<xx.xx>). 关闭刚刚打开的 Socket
  • 按下 Ctrl + G 然后再输入 q 退出控制台。
    image

此外将 EMQX Dashboard 和 Webhook Server 设置为相同端口并没有什么帮助,反而可能造成误解。请注意区分。

解决了吗?我遇到的问题跟你的一摸一样

@yosang 能提供一下webhook的配置信息和400失败时候api response信息和emqx的日志吗?

他自己好了,我因为其他需求升级了下docker到最新版本, 然后重启了容器,阴差阳错连接成功了。不过之前是真奇怪,我防火墙啥的都开通了,实在是想不到问题出在了哪里。