ElinkMQ · 自研消息服务

百万级并发、毫秒级转发、内置规则引擎与 ACL,可作为 SaaS 使用,也可一键私有化。

1.2M
单节点并发连接
12ms
P99 转发延迟
100K/s
单节点吞吐 (QoS1)
v5.0
MQTT 协议版本

主题规范 / TOPIC SPEC

清晰、稳定、可扩展

topic tree
elink/{device_id}/
  ├─ cmd/set        # cloud → device
  ├─ cmd/get        # request shadow
  ├─ shadow/update  # device → cloud
  ├─ shadow/delta   # diff to apply
  ├─ event/online   # LWT-driven
  ├─ event/alarm    # urgent push
  ├─ ota/notify
  └─ log/{level}
LIVE FEED
elink/sw-204/shadow/update {"ch":1,"power":"on"} QoS 1
elink/light-77/cmd/set {"bri":80,"cct":4500} QoS 1
elink/outlet-12/event/online {"v":"1.4.2"} QoS 0
elink/sensor-3a/shadow/update {"t":24.6,"h":52} QoS 0
elink/gw-009/event/alarm {"code":42,"sev":2} QoS 2
elink/sw-018/cmd/get {} QoS 1
elink/light-cc/shadow/update {"power":"off"} QoS 1

部署 / DEPLOY

一行命令起一个集群

docker-compose.yml
# docker-compose.yml
version: "3.8"
services:
  elinkmq:
    image: elinksmart/mq:4.2
    ports:
      - "1883:1883"   # MQTT
      - "8883:8883"   # MQTTS
      - "8083:8083"   # WSS
    environment:
      ELINK_CLUSTER_PEERS: "node-1,node-2"
      ELINK_AUTH: "jwt"
      ELINK_RULES: "/etc/elinkmq/rules.sql"
    volumes:
      - ./data:/var/lib/elinkmq
// rules.sql — rule engine
-- forward all alarms to webhook
CREATE RULE alarm_to_webhook
SELECT
  payload.code   AS code,
  payload.msg    AS msg,
  topic          AS src
FROM "elink/+/event/alarm"
WHERE payload.severity >= 3
DO
  webhook("https://ops.acme.io/hook"),
  influxdb("alarms");

-- offline → SMS
CREATE RULE offline_alert
SELECT client_id FROM "$SYS/+/disconnected"
DO sms("+86138...");