在物联网和实时消息通信领域,MQTT 协议因其轻量级、高效和发布/订阅模式而备受青睐,Apollo MQTT(现项目已演进为 ActiveMQ Artemis,但 Apollo 仍因其稳定性和易用性被广泛使用)是一个功能强大、高性能的开源消息代理,本文将详细介绍如何在 CentOS 系统上从零开始搭建一个 Apollo MQTT 服务,涵盖环境准备、安装配置、服务管理及连接测试等关键步骤。

准备工作
在开始安装之前,确保您的系统满足以下基本条件:
- 操作系统:一台安装了 CentOS 7 或 CentOS 8 的服务器。
- 权限:拥有 root 权限或具有 sudo 权限的普通用户。
- Java 环境:Apollo 是基于 Java 构建的,因此系统必须安装 Java 运行环境(JRE)或 Java 开发工具包(JDK),推荐使用 OpenJDK 8 或 11 版本。
您可以通过以下命令检查是否已安装 Java:
java -version
如果尚未安装,可以使用 yum 包管理器快速安装 OpenJDK:
# 对于 CentOS 7 sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel # 对于 CentOS 8 sudo dnf install -y java-11-openjdk java-11-openjdk-devel
安装完成后,再次运行 java -version 确认安装成功。
下载与安装 Apollo
Apollo 的官方发布版是一个二进制压缩包,我们只需下载、解压即可完成“安装”。
-
下载 Apollo Apollo 的原始下载链接可能已不易寻找,但您可以从 Apache 的归档库或其他可信的软件源获取,这里以一个示例版本为例(请根据实际情况替换为最新或稳定版本的链接):
cd /usr/local/src wget http://archive.apache.org/dist/activemq/activemq-apollo/1.7.1/apollo-unix-distribution-1.7.1.tar.gz
-
解压与部署 将下载的压缩包解压,并将其移动到一个规范化的目录,
/opt。tar -xzf apollo-unix-distribution-1.7.1.tar.gz sudo mv apollo-unix-distribution-1.7.1 /opt/apollo
至此,Apollo 程序文件已部署到
/opt/apollo目录下。
创建与配置 Broker 实例
Apollo 采用了“实例”的概念来管理多个独立的 Broker,每个实例都有自己独立的配置、日志和数据存储。
-
创建实例 使用
apollo create命令来创建一个新的 Broker 实例,我们将其命名为mybroker:cd /opt/apollo sudo ./bin/apollo create /opt/apollo/mybroker
执行后,系统会在
/opt/apollo/mybroker目录下生成一套完整的实例文件结构,主要包括:bin/:存放该实例的启动、停止等管理脚本。etc/:存放核心配置文件,如apollo.xml和users.properties。data/:存储消息、KahaDB 数据库等。log/:存放运行日志。
-
配置实例 实例的核心配置文件是
/opt/apollo/mybroker/etc/apollo.xml,我们需要对其进行一些基本修改,以启用 MQTT 服务并允许远程连接。
使用
vi或nano编辑器打开该文件:sudo vi /opt/apollo/mybroker/etc/apollo.xml
主要关注
<acceptor>配置项,默认情况下,它可能只监听本地回环地址,为了允许其他设备连接,需要将其修改为监听所有网络接口。找到类似下面的配置行:
<acceptor>tcp://0.0.0.0:61613</acceptor>
tcp://:表示使用 TCP 协议。0.0.0:表示监听服务器上所有的网络接口卡,这是实现远程访问的关键。61613:这是 Apollo 默认的 MQTT 协议端口。
如果您希望启用用户名和密码认证,可以编辑
/opt/apollo/mybroker/etc/users.properties文件,其格式为用户名=密码,添加一个用户admin:admin=password123
保存文件后,Apollo 将会使用此文件进行简单的用户认证。
启动与管理服务
为了方便管理,我们推荐将 Apollo 配置为系统服务,使用 systemd 进行管理。
-
创建 systemd 服务文件 创建一个新的服务单元文件:
sudo vi /etc/systemd/system/apollo.service
粘贴到文件中,请确保路径与您的实际安装路径一致。
[Unit] Description=Apache Apollo MQTT Broker After=network.target [Service] Type=forking User=root Group=root ExecStart=/opt/apollo/mybroker/bin/apollo-broker-service start ExecStop=/opt/apollo/mybroker/bin/apollo-broker-service stop ExecReload=/opt/apollo/mybroker/bin/apollo-broker-service restart PIDFile=/opt/apollo/mybroker/data/apollo.pid Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
-
启用并启动服务 重新加载
systemd配置,然后设置 Apollo 服务开机自启,并立即启动它。sudo systemctl daemon-reload sudo systemctl enable apollo.service sudo systemctl start apollo.service
-
检查服务状态 使用以下命令查看 Apollo 服务的运行状态,确认其正常运行:
sudo systemctl status apollo.service
如果看到
active (running)的绿色字样,说明服务已成功启动,可以查看日志文件排查潜在问题:tail -f /opt/apollo/mybroker/log/apollo.log
连接测试
服务器搭建完成后,最后一步是验证客户端能否正常连接和通信,我们可以使用 mosquitto 客户端工具进行测试。

-
安装 mosquitto 客户端
# 对于 CentOS 7 sudo yum install -y mosquitto-clients # 对于 CentOS 8,可能需要启用 EPEL 仓库 sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm sudo dnf install -y mosquitto-clients
-
执行测试 假设您的服务器 IP 地址为
168.1.100。-
开启一个订阅者终端:订阅主题
test/topic。mosquitto_sub -h 192.168.1.100 -p 61613 -t "test/topic" -u admin -P password123
-h:指定服务器地址。-p:指定端口。-t:指定订阅主题。-u和-P:指定用户名和密码(如果配置了认证)。
-
开启另一个发布者终端:向
test/topic主题发送一条消息。mosquitto_pub -h 192.168.1.100 -p 61613 -t "test/topic" -m "Hello from CentOS Apollo!"
-m:指定消息内容。
当您在发布者终端执行命令后,订阅者终端应该会立即收到
Hello from CentOS Apollo!这条消息,这证明您的 Apollo MQTT 服务器已经成功搭建并运行。 -
相关问答 FAQs
Q1: 为什么我的客户端无法连接到 Apollo MQTT 服务器,总是提示超时或连接被拒绝?
A1: 这是一个常见的网络问题,请从以下几个方面排查:
- 防火墙:CentOS 默认的
firewalld可能会阻止 61613 端口,请执行以下命令开放端口:sudo firewall-cmd --permanent --add-port=61613/tcp sudo firewall-cmd --reload
- 服务状态:确认 Apollo 服务确实在运行,使用
sudo systemctl status apollo.service检查。 - 监听地址:再次检查
apollo.xml中的<acceptor>配置,确保是0.0.0而不是0.0.1。 - IP 地址和端口:确保客户端连接的服务器 IP 地址和端口号(61613)完全正确,没有拼写错误。
- 认证信息:如果启用了认证,请确保客户端提供的用户名和密码与
users.properties文件中的完全一致。
Q2: Apollo 和 ActiveMQ Artemis 有什么区别?对于新项目,我应该选择哪个?
A2: Apollo 和 ActiveMQ Artemis 都是 Apache 出品的优秀消息中间件,但它们代表了不同的技术代。
- Apollo:是早期的项目,代码库基于 ActiveMQ 5.x 的核心,它非常稳定、成熟,配置相对简单,目前该项目已进入维护模式,不再有重大的新功能开发。
- ActiveMQ Artemis:是 Apollo 的继任者,也是一个从 HornetQ 项目捐赠而来的下一代消息代理,它采用了全新的、异步内核,提供了更高的性能、更低的延迟和更丰富的功能(如更好的集群支持、AMQP 协议的原生支持等),Artemis 是目前社区和 Apache 基金会主推和积极开发的项目。
如果您正在维护一个基于 Apollo 的旧系统,继续使用 Apollo 是完全可行的,但对于任何新项目,强烈推荐选择 ActiveMQ Artemis,它不仅性能更强,而且拥有活跃的社区支持和持续的更新,能更好地满足未来的需求,本文的搭建流程与 Artemis 有相似之处,但配置细节和命令有所不同。