Celery: روابط متعددة لنفس قائمة الانتظار: يتم إنشاء الربط الأخير فقط في RabbitMQ

تم إنشاؤها على ٣١ أكتوبر ٢٠١٦  ·  3تعليقات  ·  مصدر: celery/celery

قائمة تدقيق

  • [X] لقد قمت بتضمين ناتج celery -A proj report في الإصدار.
    (إذا لم تكن قادرًا على القيام بذلك ، فعليك على الأقل تحديد الكرفس
    النسخة المتأثرة).
  • [x] لقد تحققت من وجود المشكلة في فرع الكرفس master .
software -> celery:3.1.0 (Cipater) kombu:3.0.37 py:2.7.10
            billiard:3.3.0.23 py-amqp:1.4.9
platform -> system:Darwin arch:64bit imp:CPython
loader   -> celery.loaders.default.Loader
settings -> transport:amqp results:redis://localhost:6379/0

CELERY_QUEUES:
    (<unbound Queue Test_Queue -> <unbound Exchange test_exchange(topic)> -> myapp.tasks.some_tasks.#>,
 <unbound Queue Test_Queue -> <unbound Exchange test_exchange(topic)> -> myapp.tasks.more_tasks.#>)
RABBITMQ_MANAGEMENT_URL: 'localhost:15672'
CELERY_IMPORTS:
    ('myapp.tasks.some_tasks', 'myapp.tasks.more_tasks')
CELERY_ROUTES:
    (<myapp.routers.DefaultRouter object at 0x1077952d0>,)
BROKER_URL: 'amqp://guest:********<strong i="13">@localhost</strong>:5672//'
CELERY_RESULT_BACKEND: 'redis://localhost:6379/0'

خطوات التكاثر

  1. قم بإنشاء ارتباطين على تبادل موضوع باستخدام مفاتيح توجيه مختلفة ولكن قم بتوجيههما إلى نفس قائمة الانتظار في CELERY_QUEUES.
CELERY_QUEUES = (
    Queue("Test_Queue", default_exchange, routing_key="myapp.tasks.some_tasks.#"),
    Queue("Test_Queue", default_exchange, routing_key="myapp.tasks.more_tasks.#"),
)
  1. تجسيد عامل الكرفس
  2. انتقل إلى وحدة تحكم مشرف RabbitMQ http: // localhost : 15672 /
  3. انقر فوق علامة التبويب "قوائم الانتظار" ، ثم قائمة الانتظار التي قمت بإنشائها في الإعدادات الخاصة بك
  4. تأكد من وجود ارتباط واحد فقط
    screen shot 2016-10-31 at 5 52 03 pm

سلوك متوقع

  1. يجب أن يكون هناك ارتباط ثانٍ بمفتاح التوجيه myapp.tasks.some_tasks.#
  2. يمكن تكرار ذلك في وحدة التحكم الكرفس amqp:
celery amqp
queue.bind Test_Queue test_exchange Key1
queue.bind Test_Queue test_exchange Key2

السلوك الفعلي

  1. يتم إنشاء الربط الأخير فقط لاسم قائمة انتظار معين في rabbitmq

التعليق الأكثر فائدة

CELERY_QUEUES هو تعيين من queue_name إلى queue ، لذلك بما أنك تحدد قائمتين
بنفس الاسم ، سيتم استخدام واحد منهم فقط.

لتحديد قائمة انتظار ذات روابط متعددة في Kombu ، يجب عليك استخدام:

from kombu import Exchange, Queue, binding
default_exchange = Exchange('default', type='direct')

CELERY_QUEUES = (
    Queue('Test_Queue', [
         binding(default_exchange, routing_key='myapp.tasks.some_tasks.#'),
         binding(default_exchange, routing_key='myapp.tasks.more_tasks.#'),
    ]),
)

ال 3 كومينتر

CELERY_QUEUES هو تعيين من queue_name إلى queue ، لذلك بما أنك تحدد قائمتين
بنفس الاسم ، سيتم استخدام واحد منهم فقط.

لتحديد قائمة انتظار ذات روابط متعددة في Kombu ، يجب عليك استخدام:

from kombu import Exchange, Queue, binding
default_exchange = Exchange('default', type='direct')

CELERY_QUEUES = (
    Queue('Test_Queue', [
         binding(default_exchange, routing_key='myapp.tasks.some_tasks.#'),
         binding(default_exchange, routing_key='myapp.tasks.more_tasks.#'),
    ]),
)

رائعة! اختبرته للتو وتم إنشاء كلا الارتباطين. هل هذا يستحق الإضافة إلى مستندات التوجيه؟ يمكنني إنشاء طلب سحب في وقت ما الليلة أو غدًا

بالتأكيد! ستكون فكرة رائعة أن تكون موجودة في المستندات :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات