我想我們的單片PHP的Symfony應用程序遷移到與碼頭工人一個較爲靈活的解決方案。應用程序和RabbitMQ之間有一些通信,我使用docker-compose
將所有容器都放到了上面,在這裏是應用程序和RabbitMQ服務器。我應該如何構造碼頭化的RabbitMQ?
有很多圍繞着話題的討論是一個容器應產卵只有一個進程,而Docker best practices是有些含糊關於這一點:
雖然這個口頭禪本意是好的,它不一定是正確的那 每個容器應該只有一個操作系統進程。在 另外一個事實,即容器現在可以用一個init 過程中催生,有些程序可能釀出自己 協議的其他進程。
是否有意義爲每個RabbitMQ使用者創建一個單獨的Docker容器?它讓人感覺「正確」和「乾淨」,不會讓rabbitmq服務器知道用於處理隊列的語言/工具。我想出了(的docker-compose.yml
相關部分):
app :
# my php-fpm app container
rabbitmq_server:
container_name: sf.rabbitmq_server
build: .docker/rabbitmq
ports:
- "15672:15672"
- "5672:5672"
networks:
- app_network
rabbitmq_consumer:
container_name: sf.rabbit_consumer
extends: app
depends_on:
- rabbitmq_server
working_dir: /app
command: "php bin/console rabbitmq:consumer test"
networks:
- app_network
我可以使用nohup
在後臺運行,其中一些其他的方式rabbitmq_consumer
容器或運行了幾位消費者。
我想我的問題是:
我可以以某種方式自動執行「添加一個新的消費」,這樣我就不用編輯多克的「構建腳本」(和其他人一樣,ansible)每次新的消費者是從代碼中添加的?
是否有意義分離從消費者的RabbitMQ服務器,或者我應該使用在後臺運行的消費者兔子服務器?
還是應該放在應用程序容器的背景是什麼?
感謝您的見解和依據。擁有一個可以處理額外隊列的進程管理器容器是解決和分離許多事情的好主意。再然後,PHP還挺吮吸處理長期運行的流程,我真的很想嘗試一些替代品swoole,可能與一些Python或不便處理。 – reafle