[僅限PaaS]{class="badge informative" title="僅適用於雲端專案(Adobe管理的PaaS基礎結構)和內部部署專案的Adobe Commerce 。"}
移轉至ActiveMQ
ActiveMQ (Apache ActiveMQ Artemis)是高效能、多通訊協定訊息代理人,可作為RabbitMQ的替代方案,用於處理Adobe Commerce中的訊息佇列。
截至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 Console的訊息輸送量
- 監視應用程式記錄檔中的佇列相關錯誤
- 驗證非同步操作(設定儲存、匯出等)是否正常運作
- 檢查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
完成移轉後,不需要進一步變更設定值。