
hivemq/hivemq4获取帮助: 联系我们
提交问题: GitHub 问题跟踪器
维护者: HiveMQ
Dockerfiles: GitHub
HiveMQ 是一个基于 MQTT 的消息平台,专为物联网设备间快速、高效、可靠的数据传输而设计。它使用 MQTT 协议实现设备与企业系统之间的即时双向数据推送。
HiveMQ 旨在解决组织构建新型物联网应用时面临的关键技术挑战,包括:
HiveMQ 核心是兼容 MQTT 3.1、MQTT 3.1.1 和 MQTT 5.0 的 MQTT broker,其优势在于为企业用例和专业部署设计的附加功能。
有关更多信息,请参见功能。
| 标签 | 含义 |
|---|---|
| latest | 始终指向 HiveMQ 基础镜像的最新版本 |
| dns-latest | 始终指向 HiveMQ DNS 发现镜像的最新版本 |
<version> | 提供指定版本 broker 的基础镜像(例如 4.0.0) |
dns-<version> | 基于指定版本基础镜像的 DNS 发现镜像 |
k8s-<version> | 用于 Kubernetes Operator 的镜像 |
要启动单个 HiveMQ 实例并开放 MQTT 端口及控制中心访问,请获取 Docker 并运行以下命令:
bashdocker run --ulimit nofile=500000:500000 -p 8080:8080 -p 8000:8000 -p 1883:1883 hivemq/hivemq4
您可以通过 MQTT(1883 端口)、WebSocket(8000 端口)连接 broker,或通过 8080 端口访问控制中心。
对于 HiveMQ 集群部署,建议使用 DNS 发现镜像。该镜像内置 HiveMQ DNS 发现扩展,可与任何支持通过轮询 A 记录进行服务发现的容器编排引擎配合使用。也可使用提供 A 记录的自定义解决方案。
以下环境变量可分别用于自定义发现和 broker 配置:
| 环境变量 | 默认值 | 含义 |
|---|---|---|
| HIVEMQ_DNS_DISCOVERY_ADDRESS | - | 用于集群发现的 A 记录获取地址 |
| HIVEMQ_DNS_DISCOVERY_INTERVAL | 31 | 搜索新节点的时间间隔(秒) |
| HIVEMQ_DNS_DISCOVERY_TIMEOUT | 30 | DNS 解析超时时间(秒) |
| HIVEMQ_CLUSTER_PORT | 8000 | 集群传输使用的端口 |
| HIVEMQ_BIND_ADDRESS | - | 集群传输绑定地址,仅在默认策略(解析主机名)失败时需要设置 |
| HIVEMQ_CLUSTER_TRANSPORT_TYPE | UDP | 集群传输协议类型 |
| HIVEMQ_LICENSE | - | broker 使用的 base64 编码许可证文件 |
| HIVEMQ_CONTROL_CENTER_USER | admin | HiveMQ 控制中心登录用户名 |
| HIVEMQ_CONTROL_CENTER_PASSWORD | adminhivemq 的 SHA256 哈希 | HiveMQ 控制中心认证密码哈希 |
| HIVEMQ_HIVEMQ_NO_ROOT_STEP_DOWN | - | 设置为 true 可禁用启动时的 root 权限降级,详见 HiveMQ 基础镜像 |
| HIVEMQ_ALLOW_ALL_CLIENTS | true | 是否启用默认内置的 allow-all 扩展(4.3.0 及以上版本),设为 false 会在启动时删除该扩展(4.3.0 之前版本无效) |
| HIVEMQ_LOG_LEVEL | INFO | 根日志级别(4.3.1 及以上版本可用) |
以下是在 Docker Swarm 和 Kubernetes 中使用该镜像的示例,其他支持 DNS 发现的环境也兼容。
要在本地运行 HiveMQ 集群,可使用 Docker Swarm(注意:不建议在生产环境使用 Docker Swarm):
bashdocker swarm init
bashdocker network create -d overlay --attachable myNetwork
bashdocker service create \ --replicas 3 --network myNetwork \ --env HIVEMQ_DNS_DISCOVERY_ADDRESS=tasks.hivemq \ --publish target=1883,published=1883 \ --publish target=8080,published=8080 \ -p 8000:8000/udp \ --name hivemq \ hivemq/hivemq4:dns-latest
此命令将部署 3 节点集群,并将 MQTT(1883)和 HiveMQ 控制中心(8080)端口转发到主机网络。MQTT 客户端可通过 1883 端口连接,连接将转发到任意集群节点。
有关集群管理的更多信息,请参见 管理集群。
注意:建议使用 Kubernetes Operator,它能简化 HiveMQ 在 Kubernetes 上的部署。
生产环境中,建议将 DNS 发现镜像与 Kubernetes 结合使用。Kubernetes 中需配置适当的部署以利用 DNS 发现,无头服务 可提供用于发现的 broker DNS 记录。
以下是使用 DNS 发现的 3 节点 HiveMQ 集群的复制控制器配置示例。需根据 Kubernetes 命名空间和配置的域替换 HIVEMQ_DNS_DISCOVERY_ADDRESS:
yamlapiVersion: v1 kind: ReplicationController metadata: name: hivemq-replica spec: replicas: 3 selector: app: hivemq-cluster1 template: metadata: name: hivemq-cluster1 labels: app: hivemq-cluster1 spec: containers: - name: hivemq-pods image: hivemq/hivemq4:dns-latest ports: - containerPort: 8080 protocol: TCP name: hivemq-control-center - containerPort: 1883 protocol: TCP name: mqtt env: - name: HIVEMQ_DNS_DISCOVERY_ADDRESS value: "hivemq-discovery.default.svc.cluster.local." - name: HIVEMQ_DNS_DISCOVERY_TIMEOUT value: "20" - name: HIVEMQ_DNS_DISCOVERY_INTERVAL value: "21" - name: HIVEMQ_CLUSTER_TRANSPORT_TYPE value: "TCP" readinessProbe: tcpSocket: port: 1883 initialDelaySeconds: 30 periodSeconds: 60 failureThreshold: 60 livenessProbe: tcpSocket: port: 1883 initialDelaySeconds: 30 periodSeconds: 60 failureThreshold: 60 --- kind: Service apiVersion: v1 metadata: name: hivemq-discovery annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 1883 targetPort: 1883 clusterIP: None
要访问 Kubernetes 集群中的 HiveMQ 控制中心,请执行以下步骤:
web.yaml):yamlkind: Service apiVersion: v1 metadata: name: hivemq-control-center spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 8080 targetPort: 8080 sessionAffinity: ClientIP type: Load***
kubectl create -f web.yaml 创建服务。注意: 根据 Kubernetes 环境提供商,负载均衡器可能不可用或需要额外配置才能访问控制中心。
要允许外部客户端访问 Kubernetes 集群的 MQTT 端口,请执行以下步骤:
mqtt.yaml):yamlkind: Service apiVersion: v1 metadata: name: hivemq-mqtt annotations: service.spec.externalTrafficPolicy: Local spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 1883 targetPort: 1883 type: Load***
kubectl create -f mqtt.yaml 创建服务。注意: externalTrafficPolicy 注解用于允许 Kubernetes 服务维持大量并发连接,详见 服务源 IP。
环境变量 HIVEMQ_CONTROL_CENTER_PASSWORD 允许通过定义自定义密码的 SHA256 哈希来设置控制中心密码。环境变量 HIVEMQ_CONTROL_CENTER_USER 可配置用户名。
有关如何生成密码哈希的更多信息,请参见 生成 SHA256 密码。
要在 HiveMQ 容器中使用许可证,需先将许可证文件编码为字符串。运行 cat license.lic | base64(将 license.lic 替换为许可证文件路径),然后将结果字符串设置为容器的 HIVEMQ_LICENSE 环境变量值。
默认情况下,HiveMQ 镜像使用内置的 hivemq-allow-all-extension。设置环境变量 HIVEMQ_ALLOW_ALL_CLIENTS 为 false 可在启动时删除该扩展。
默认情况下,HiveMQ 镜像在启动时检查 root 权限,若存在则切换到低权限用户以增强容器安全性。设置环境变量 HIVEMQ_NO_ROOT_STEP_DOWN 为 false 可跳过此步骤。
默认情况下,HiveMQ DNS 发现镜像尝试使用容器的 ${HOSTNAME} 设置绑定地址,以确保 HiveMQ 将集群连接绑定到正确接口。设置 HIVEMQ_BIND_ADDRESS 环境变量可覆盖此行为,broker 将使用指定值作为绑定地址。
默认情况下,HiveMQ DNS 发现镜像使用 UDP 作为集群传输协议。设置 HIVEMQ_CLUSTER_TRANSPORT_TYPE 环境变量为 TCP 可改用 TCP。
注意: 建议使用 TCP 作为集群传输协议,可降低高网络负载下网络分区的风险。
有关构建自定义 HiveMQ 镜像的更多信息,请参见 文档。






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务