Tugas perutean seledri ke server pekerja yang salah

Jadi saya punya dua server pekerja (celeryd) yang menggunakan dua host virtual di server kelincimq yang sama. Saya meneruskan variabel ke file messagecenter.py saya untuk menentukan url broker mana yang harus digunakan untuk menerbitkan tugas. Setelah melakukan debug beberapa saat saya menemukan bahwa setelah seledri membuat koneksi dengan url broker - seledri tidak terputus dari vhost sebelumnya dan terhubung ke yang baru. Saya tidak yakin persis bagaimana pertukaran dan pengikatan bekerja di seledri. Jadi bantuan apa pun sangat dihargai.

pusat pesan.py/

from celery import Celery

MESSAGE_SETTINGS = {
    "WORKER1": "amqp://user1:pass1@server-name:5672/vhost1",
    "WORKER2": "amqp://user2:pass2@server-name:5672/vhost2"
}

class MessageCenter(object):
    def __init__(self, config):
        self._config = config
        self._celery = Celery()

    def produce_task(self, name, uuid, params):
        self._celery.conf.update(
            BROKER_URL = self._config[name])
        self._celery.send_task(uuid, params) 

Dan saya memasukkan 'WORKER1' atau 'WORKER2' bersama dengan parameter yang diperlukan untuk mempublikasikan tugas yaitu send_task. Saya berharap ada cara agar saya dapat merutekan tugas saya dengan benar ke server yang berbeda. Bantuan apa pun akan sangat dihargai.


person user2216194    schedule 16.12.2013    source sumber


Jawaban (1)


Temukan solusinya di sini

Jadi saya mengubah konfigurasi seledri saya di server pekerja untuk menyertakan dua pertukaran (masing-masing dengan kumpulan binding dan routing_keysnya sendiri). Dan kemudian saya meneruskannya sebagai params dari produser saya (yaitu send_task('task_name', [params], queue = 'myQueue', routing_key = 'myRoutingKey'))

Sekadar referensi, berikut tampilan konfigurasi seledri saya di salah satu server:

BROKER_URL = "amqp://server_URL/cel_host"

CELERY_APP = 'proj.tasks'

CELERY_IMPORTS = ('proj.tasks', )

CELERY_ROUTES = {
        'proj.tasks.send_email': {
            'queue': 'email_tasks',
            'routing_key': 'email.import',
        },
}
person user2216194    schedule 17.12.2013