2017-08-13 69 views
1

設置: Celery 4.1,RabbitMQ 3.6.1(作爲經紀人),Redis(作爲後端,這裏不相關)。send_task只適用於特定用戶

有兩個兔子用戶:

  • admin_user.* .* .*權限。
  • remote_user權限爲ack ack ack

admin_user可觸發任務並由芹菜工作人員用來處理任務。

remote_user僅可以觸發一個類型的任務 - ack和在專用ack隊列後來排入由ack工人被消耗(由admin_user)。

remote_user通過下面的代碼發送任務:

from celery import Celery 

app = Celery('remote', broker='amqp://remote_user:[email protected]<machine_ip>:5672/vhost') 
app.send_task('ack', args=('a1', 'a2'), queue='ack', route_name='ack') 

這完全適用於芹菜3.1。升級到Celery 4.1後,它不再發送任務。該呼叫返回AsyncResult,但我沒有在芹菜花(或通過兔子管理UI)或日誌中看到該消息。

  • 嘗試設置權限remote_user.* .* .*作爲admin_user - 沒有幫助。
  • 試圖添加administrator標記 - 沒有幫助。

代理的用戶更改爲 'amqp://admin_user:[email protected]<machine_ip>:5672/vhost'不工作:

from celery import Celery 

app = Celery('remote', broker='amqp://admin_user:[email protected]<machine_ip>:5672/vhost') 
app.send_task('ack', args=('a1', 'a2'), queue='ack', route_name='ack') 

但我不希望給遠程機器admin_user權限。 任何想法我可以做什麼?

回答

0

解決, API改變了我猜想,但留在RabbitMQ的目前的權限,我不得不使用以下路線:

old_celery_config.py:(芹菜3.1)

CELERY_ROUTES = { 
    'ack_task': { 
     'queue': 'geo_ack' 
    } 
} 

celery_config.py:(芹菜4.1)

CELERY_ROUTES = { 
    'ack_task': { 
     'exchange': 'ack', 
     'exchange_type': 'direct', 
     'routing_key': 'ack' 
    } 
} 

run_task.py:

from celery import Celery 

app = Celery('remote', broker='amqp://remote_user:[email protected]<machine_ip>:5672/vhost') 
app.config_from_object('celery_config') 
app.send_task('ack_task', args=('a1', 'a2')) 
相關問題