[仅限PaaS]{class="badge informative" title="仅适用于云项目(Adobe管理的PaaS基础架构)和内部部署项目上的Adobe Commerce 。"}
迁移到ActiveMQ
ActiveMQ (Apache ActiveMQ Artemis)是一种高性能、多协议消息代理,为Adobe Commerce中处理消息队列的RabbitMQ提供了替代方案。
截至2.4.8-p3、2.4.7-p8、2.4.6-p13和2.4.5-p16,Adobe Commerce支持ActiveMQ作为消息队列代理。 这为本地安装提供了更大的灵活性,以便根据其基础架构要求和专业知识在RabbitMQ和ActiveMQ之间进行选择。
开始之前
在开始迁移之前,请确保满足以下条件:
- 在
app/etc/env.php中查看您当前的RabbitMQ配置。 - 对数据库和代码库进行完整备份。
- 确保您的安装符合ActiveMQ的系统要求。
- 规划一个维护窗口以完成迁移。
迁移路径
迁移到ActiveMQ是一个简单的过程,但务必要确保在切换代理之前处理所有待处理消息。
这些迁移指令假设Adobe Commerce是唯一利用消息队列代理的应用程序。
步骤1:将站点置于维护模式
-
将站点置于维护模式:
code language-bash bin/magento maintenance:enable -
验证是否启用了维护模式:
code language-bash bin/magento maintenance:status
步骤2:检查RabbitMQ消息计数
在继续之前,请验证RabbitMQ中的所有消息均已处理完毕。 使用以下方法之一:
方法A:使用RabbitMQ管理功能板
-
访问
http://<host>:15672上的RabbitMQ管理UI -
默认凭据:
guest/guest -
导航到 队列 选项卡
-
验证所有队列是否显示0条消息
方法B:使用rabbitmqctl命令行
-
检查所有队列及其消息计数:
code language-bash rabbitmqctl list_queues name messages consumers {width="500"}
-
检查详细的队列信息:
code language-bash rabbitmqctl list_queues name messages messages_ready messages_unacknowledged consumers {width="500"}
步骤3:处理待处理消息
如果消息在任何队列中处于挂起状态,请在继续之前处理这些消息。
-
获取可用使用者的列表:
code language-bash bin/magento queue:consumers:list -
将使用者作为组或按单个消息队列处理:
-
将使用者处理为组
code language-bash bin/magento cron:run --group=consumersnote note NOTE 如果cron已在系统中运行,则无需手动运行 bin/magento cron:run --group=consumers。 相反,使用步骤2中的命令检查消息计数,以验证是否正在处理消息。 -
处理特定消息队列
code language-bash bin/magento queue:consumers:start <consumer_name> --max-messages=<number>例如,要处理异步操作,请执行以下操作:
code language-bash bin/magento queue:consumers:start async.operations.all --max-messages=1000note note NOTE --max-messages参数限制使用者停止之前要处理的消息数。 根据队列大小调整此值。 -
监视邮件处理
持续检查消息计数,直到所有队列为空:
code language-bash # Check every few seconds until 0 messages remain watch -n 5 "rabbitmqctl list_queues name messages | grep -v '^Listing' | grep -v '0$'"
-
步骤4:验证是否处理了所有消息
在继续下一步之前,请确保所有队列都显示0条消息。 再次运行步骤2中的验证命令。
步骤5:停止使用者和cron作业
-
停止所有正在运行的消息队列使用者:
code language-bash # If using supervisor supervisorctl stop all # Or manually kill consumer processes pkill -f "queue:consumers:start" -
禁用cron作业:
code language-bash bin/magento cron:remove -
验证是否已删除cron作业:
code language-bash crontab -l
步骤6:备份当前配置
创建当前配置的备份:
cp app/etc/env.php app/etc/env.php.backup.rabbitmq
步骤7:可选地卸载RabbitMQ
如果不再需要RabbitMQ,您可以将其卸载。
步骤8:在Adobe Commerce中安装和配置ActiveMQ
要完成ActiveMQ安装和配置任务(如配置STOMP协议和验证连接),请参阅安装和配置指南。
步骤9:重新安装cron作业
-
测试成功完成后,重新安装cron作业:
code language-bash bin/magento cron:install -
验证是否已计划cron作业:
code language-bash crontab -l
步骤10:禁用维护模式
-
验证所有组件均正确工作后,禁用维护模式:
code language-bash bin/magento maintenance:disable -
验证维护模式是否已禁用:
code language-bash bin/magento maintenance:status
步骤11:监视系统
迁移后24-48小时监控您的系统,以确保所有队列操作均正常运行:
- 定期检查ActiveMQ Web控制台的消息吞吐量
- 监控应用程序日志中是否存在与队列相关的错误
- 验证异步操作(配置保存、导出等)是否正常工作
- 检查cron日志,确保使用者正在运行
# Monitor system logs for queue activity
tail -f var/log/system.log | grep -i queue
# Monitor cron logs
tail -f var/log/cron.log
# Check running consumer processes
ps aux | grep "queue:consumers:start"
回滚
如果在迁移期间或迁移之后出现问题,您可以回滚到RabbitMQ:
-
启用维护模式:
code language-bash bin/magento maintenance:enable -
停止所有使用者并禁用cron:
code language-bash pkill -f "queue:consumers:start" bin/magento cron:remove -
恢复以前的配置:
code language-bash cp app/etc/env.php.backup.rabbitmq app/etc/env.php -
启动RabbitMQ(如果停止):
code language-bash sudo systemctl start rabbitmq-server -
清除缓存:
code language-bash bin/magento cache:flush -
重新安装cron:
code language-bash bin/magento cron:install -
禁用维护模式:
code language-bash bin/magento maintenance:disable
完成迁移后,无需进一步更改配置值。