开发Fastadmin API接口接收EMQX Webhook任务

接口1(接收事件信息)

// application/api/controller/EmqxEvent.php
namespace app\api\controller;

use think\Controller;
use think\Db;

class EmqxEvent extends Controller
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    public function receiveEvent()
    {
        $data = $this->request->post();
        Db::name('emqx_events')->insert([
            'event_type' => $data['action'] ?? '',
            'client_id' => $data['clientid'] ?? '',
            'username' => $data['username'] ?? '',
            'payload' => json_encode($data),
            'create_time' => time()
        ]);
        return json(['code' => 200, 'msg' => 'success']);
    }
}

接口2(接收MQTT订阅信息)

// application/api/controller/EmqxMessage.php
namespace app\api\controller;

use think\Controller;
use think\Db;

class EmqxMessage extends Controller
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    public function receiveMessage()
    {
        $data = $this->request->post();
        Db::name('mqtt_messages')->insert([
            'topic' => $data['topic'] ?? '',
            'qos' => $data['qos'] ?? 0,
            'payload' => $data['payload'] ?? '',
            'client_id' => $data['clientid'] ?? '',
            'create_time' => time()
        ]);
        return json(['code' => 200, 'msg' => 'success']);
    }
}

数据库表SQL语句

事件信息表

CREATE TABLE `emqx_events` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `event_type` varchar(50) NOT NULL DEFAULT '' COMMENT '事件类型',
  `client_id` varchar(100) NOT NULL DEFAULT '' COMMENT '客户端ID',
  `username` varchar(50) DEFAULT '' COMMENT '用户名',
  `payload` text COMMENT '原始数据',
  `create_time` int(11) DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_client_id` (`client_id`),
  KEY `idx_event_type` (`event_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='EMQX事件记录表';

MQTT消息表

CREATE TABLE `mqtt_messages` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `topic` varchar(255) NOT NULL DEFAULT '' COMMENT '主题',
  `qos` tinyint(1) DEFAULT '0' COMMENT '服务质量',
  `payload` text COMMENT '消息内容',
  `client_id` varchar(100) DEFAULT '' COMMENT '客户端ID',
  `create_time` int(11) DEFAULT '0' COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_topic` (`topic`),
  KEY `idx_client_id` (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MQTT消息记录表';

EMQX v5.10 Webhook配置方法

  1. 登录EMQX Dashboard
  2. 导航到"管理"->"WebHook"
  3. 点击"创建"按钮
  4. 填写Webhook名称和目标URL(对应FastAPI接口地址)
  5. 事件类型选择需要触发的事件(如客户端连接、断开、消息发布等)
  6. 根据需要配置其他选项(如请求方法、内容格式等)
  7. 保存配置并启用Webhook

典型Webhook配置示例

  • 事件信息接口URL: http://your-domain.com/api/emqx_event/receiveEvent
  • MQTT消息接口URL: http://your-domain.com/api/emqx_message/receiveMessage

注意事项

  • 确保EMQX服务器可以访问FastAPI接口
  • 建议在接口中添加简单的验证机制(如IP白名单或Token验证)
  • 根据实际业务需求调整数据存储逻辑
  • 在FastAPI配置中确保路由正确设置

登录EMQX Dashboard,进入Management -> WebHook页面:

  1. 创建事件WebHook:

    • URL: http://your-domain.com/admin/emqx.event/receive
    • 事件类型选择:client.connectedclient.disconnected
    • 启用认证(如果需要)
    • 保存配置
  2. 创建消息WebHook:

    • URL: http://your-domain.com/admin/emqx.message/receive
    • 事件类型选择:message.publish
    • 配置Topic过滤器(如#表示所有主题)
    • 保存配置

通过API配置(替代Dashboard操作):


bash复制插入

# 创建事件WebHook
curl -X POST 'http://emqx-server:18083/api/v5/web_hook' \
-H 'Content-Type: application/json' \
-d '{
    "name": "fastadmin_events",
    "url": "http://your-domain.com/admin/emqx.event/receive",
    "request_timeout": "5s",
    "enable_pipelining": 100,
    "ssl": {"enable": false},
    "method": "POST",
    "headers": {"content-type":"application/json"},
    "events": ["client.connected","client.disconnected"]
}'

# 创建消息WebHook
curl -X POST 'http://emqx-server:18083/api/v5/web_hook' \
-H 'Content-Type: application/json' \
-d '{
    "name": "fastadmin_messages",
    "url": "http://your-domain.com/admin/emqx.message/receive",
    "request_timeout": "5s",
    "enable_pipelining": 100,
    "ssl": {"enable": false},
    "method": "POST",
    "headers": {"content-type":"application/json"},
    "events": ["message.publish"],
    "topic": "#"
}'

复制插入

安全配置建议

  1. 在FastAdmin接口中添加Token验证
  2. 配置EMQX WebHook的Secret(5.10版本支持)
  3. 限制EMQX WebHook源的IP地址
  4. 接口启用HTTPS加密传输

测试验证

  1. 使用MQTT客户端发布测试消息
  2. 在EMQX Dashboard查看WebHook触发状态
  3. 检查FastAdmin数据库表中是否成功写入数据
  4. 通过EMQX CLI命令查看WebHook状态:emqx_ctl webhooks list

插入复制重新生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值