tfgco/arkadikoArkadiko是一款轻量级的协议桥接工具,核心功能是在HTTP协议与MQTT协议之间建立通信桥梁,实现两种协议间的消息转发。通过该工具,可将HTTP请求转换为MQTT消息并发布到指定主题,或订阅MQTT主题将消息转换为HTTP请求发送至目标端点,解决跨协议通信场景下的集成问题。
bashdocker run -d \ --name arkadiko \ -p 8080:8080 \ # HTTP服务端口映射 -e MQTT_BROKER=mqtt.example.com \ # MQTT broker地址 -e MQTT_PORT=1883 \ # MQTT broker端口 -e HTTP_LISTEN_PORT=8080 \ # 容器内HTTP监听端口 arkadiko/arkadiko:latest
yamlversion: '3.8' services: arkadiko: image: arkadiko/arkadiko:latest container_name: arkadiko ports: - "8080:8080" environment: - MQTT_BROKER=mosquitto # 可关联同网络中的MQTT服务 - MQTT_PORT=1883 - MQTT_USERNAME=user # MQTT认证用户名(可选) - MQTT_PASSWORD=pass # MQTT认证密码(可选) - HTTP_LISTEN_PORT=8080 - MQTT_TOPIC_PREFIX=/http-bridge/ # MQTT消息发布主题前缀 networks: - mqtt-network # 与MQTT broker共享网络 networks: mqtt-network: external: true # 假设已存在mqtt-network网络
| 参数名 | 描述 | 默认值 | 可选值 |
|---|---|---|---|
| MQTT_BROKER | MQTT broker的IP或域名 | localhost | 如:mosquitto、192.168.1.100 |
| MQTT_PORT | MQTT broker端口 | 1883 | 1883(TCP)、8883(SSL) |
| MQTT_USERNAME | MQTT连接认证用户名 | 无 | 字符串 |
| MQTT_PASSWORD | MQTT连接认证密码 | 无 | 字符串 |
| MQTT_PROTOCOL | MQTT协议版本 | v3.1.1 | v3.1.1、v5.0 |
| HTTP_LISTEN_PORT | HTTP服务监听端口 | 8080 | 1-65535间未占用端口 |
| HTTP_ENDPOINT_PREFIX | HTTP请求路径前缀 | /publish | 如:/mqtt、/send |
| LOG_LEVEL | 日志输出级别 | info | debug、info、warn、error |
向Arkadiko的HTTP端点发送POST请求,内容将被转换为MQTT消息发布到指定主题:
bash# 发送HTTP POST请求,消息将发布到MQTT主题:/sensors/temp curl -X POST http://localhost:8080/publish/sensors/temp \ -H "Content-Type: application/json" \ -d '{"value": 26.5, "unit": "celsius"}'
配置MQTT订阅规则后(通过环境变量MQTT_SUBSCRIBE_TOPICS=/devices/#),Arkadiko会将订阅到的MQTT消息转发至指定HTTP端点:
bash# 假设配置HTTP转发目标为[***] # 当MQTT主题/devices/device1收到消息时,Arkadiko会自动向上述URL发送POST请求,内容为MQTT消息体
如需自定义复杂转发规则(如消息格式转换、主题映射),可通过挂载配置文件实现:
bashdocker run -d \ --name arkadiko \ -p 8080:8080 \ -v ./config.yaml:/app/config.yaml \ # 挂载本地配置文件 arkadiko/arkadiko:latest
配置文件(config.yaml)示例:
yamlmqtt: broker: mqtt.example.com port: 8883 tls: true username: admin password: securepass subscribe: - topic: /devices/# qos: 1 http_endpoint: [***] http: port: 8080 endpoints: - path: /publish topic_template: /http/{{.PathParams.topic}} methods: [POST, PUT]
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务