在物联网和实时消息通信领域,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 有相似之处,但配置细节和命令有所不同。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复