HTTP 服务
EMQX 支持通过 HTTP 服务的方式将 MQTT 消息和客户端事件发送到外部 HTTP 服务。
前置准备
功能清单
快速开始
我们将通过示例来展示如何使用 Dashboard 创建一个简单的 HTTP 服务,并桥接到一个 HTTP 服务器。
搭建简易 HTTP 服务
首先我们使用 Python 搭建一个简单的 HTTP 服务,用来接收 POST /
请求,该服务打印请求内容后返回 200 OK:
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()
将上面的代码保存为 http_server.py
文件,文件所在目录运行如下命令:
# 安装 flask 依赖
pip install flask
# 启动服务
python3 http_server.py
创建 HTTP 服务数据桥接
- 转到 Dashboard 数据集成 -> 数据桥接页面。
- 点击页面右上角的创建。
- 在数据桥接类型中选择 HTTP 服务,点击下一步。
- 输入数据桥接名称,要求是大小写英文字母和数字的组合,这里我们输入
my_httpserver
。 - 请求方法选择 POST,URL 为
http://localhost:5000
,其他使用默认值即可。 - 点击最下方创建按钮完成规则创建。
至此您已经完成数据桥接创建,接下来将继续创建一条规则来指定需要写入的数据。
创建数据转发规则
- 转到 Dashboard 数据集成 -> 规则页面。
- 点击页面右上角的创建。
- 输入规则 ID
my_rule
,在 SQL 编辑器中输入规则,此处选择将t/#
主题的 MQTT 消息发送到 HTTP 服务,此处规则 SQL 如下:
SELECT
*
FROM
"t/#"
- 添加动作,在动作下拉框中选择使用数据桥接转发选项,选择先前创建好的 HTTP 服务。
- 点击最下方创建按钮完成规则创建。
至此您已经完成整个创建过程,可以前往 数据集成 -> Flows 页面查看拓扑图,此时应当看到 t/#
主题的消息经过名为 my_rule
的规则处理,处理结果转发到 HTTP 服务。
测试数据桥接与规则
使用 MQTTX 向 t/1
主题发布消息,此操作同时会触发上下线事件:
mqttx pub -i emqx_c -t t/1 -m '{ "msg": "hello HTTP Server" }'
查看 HTTP 服务 运行统计,命中、发送成功次数均 +1。
查看消息是否已经转发到 HTTP 服务:
python3 http_server.py
* Serving Flask app 'http_server' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
got post request: b'hello HTTP Server'