2013-04-24 135 views
4

我想在同一臺機器上運行芹菜的兩個實例。一個是我的應用程序的'A'版本,另一個是'B'版本。在同一臺服務器上運行芹菜的多個實例

我有兩個實例,我開始是這樣的:

(env1)/home/me/firstapp$ celery -A app.tasks worker --config celeryconfig 
(env2)/home/me/secondapp$ celery -A app.tasks worker -n Carrot --config celeryconfig 

在每個應用程序tasks.py,我創建了一個實例芹菜這樣的:

celery = Celery('tasks', backend='amqp', broker='amqp://[email protected]//') 
@celery.task 
def run_a_task(): 
    do_stuff() 

在ENV2的task.py ,我怎麼能指定我想使用來自secondapp(名爲Carrot)的第二個芹菜實例,而不是第一個來自firstapp的實例?我懷疑我需要在第一行的芹菜的構造函數中改變一些東西,但我不知道要添加什麼。

+0

您能否提供更多詳細信息並澄清您準備實現的目標? – alecxe 2013-04-24 20:45:52

回答

10

我用芹菜虛擬主機解決了這個。

一旦RabbitMQ的服務器運行的是我發出以下命令:

rabbitmqctl add_user user password 
rabbitmqctl add_vhost app2 
rabbitmqctl set_permissions -p app2 user ".*" ".*" ".*" 

然後,我開始芹菜:

celery -A tasks worker --broker=amqp://user:[email protected]/app2 

隨着我的任務,我初始化芹菜對象是這樣的:

celery = Celery('tasks', backend='amqp', broker='amqp://user:[email protected]:5672/app2 
+0

該解決方案在嘗試了所有其他替代方案後運行。謝謝 – scottydelta 2015-12-19 19:07:52

5

看起來你正在使用AMQP,所以我會建議使用不同的交換機來解決這個問題。

我建議你閱讀關於AMQP結構此相關博客文章:http://blogs.digitar.com/jjww/?s=rabbits&x=0&y=0

芹菜的具體信息,看看這裏:http://docs.celeryproject.org/en/latest/userguide/routing.html

的,你可以做什麼短版是給應用程序一個不同的默認隊列:

from kombu import Exchange, Queue 

CELERY_DEFAULT_QUEUE = 'app1' 
CELERY_QUEUES = (
    Queue('app1', Exchange('app1'), routing_key='app1'), 
) 
+0

我正在尋找的解決方案涉及虛擬主機。您提供的信息對於發現該信息非常有幫助。 – munk 2013-04-29 18:18:14

相關問題