فهرست منبع

Regression: DEFAULT_DELIVERY_MODE no longer honored, also use Exchange.delivery_mode if set. Closes #1953

Ask Solem 11 سال پیش
والد
کامیت
ec01102984
2فایلهای تغییر یافته به همراه17 افزوده شده و 2 حذف شده
  1. 6 0
      celery/app/amqp.py
  2. 11 2
      docs/userguide/optimizing.rst

+ 6 - 0
celery/app/amqp.py

@@ -385,6 +385,7 @@ class AMQP(object):
     def _create_task_sender(self):
         default_retry = self.app.conf.CELERY_TASK_PUBLISH_RETRY
         default_policy = self.app.conf.CELERY_TASK_PUBLISH_RETRY_POLICY
+        default_delivery_mode = self.app.conf.CELERY_DEFAULT_DELIVERY_MODE
         default_queue = self.default_queue
         queues = self.queues
         send_before_publish = signals.before_task_publish.send
@@ -421,6 +422,11 @@ class AMQP(object):
                     qname, queue = queue, queues[queue]
                 else:
                     qname = queue.name
+            if delivery_mode is None:
+                try:
+                    delivery_mode = queue.exchange.delivery_mode
+                except AttributeError:
+                    delivery_mode = default_delivery_mode
             exchange = exchange or queue.exchange.name
             routing_key = routing_key or queue.routing_key
             if declare is None and queue and not isinstance(queue, Broadcast):

+ 11 - 2
docs/userguide/optimizing.rst

@@ -98,11 +98,20 @@ to improve performance:
 
     CELERY_QUEUES = (
         Queue('celery', routing_key='celery'),
-        Queue('transient', routing_key='transient',
-              delivery_mode=1),
+        Queue('transient', Exchange('transient', delivery_mode=1),
+              routing_key='transient', durable=False),
     )
 
 
+or by using :setting:`CELERY_ROUTES`:
+
+.. code-block:: python
+
+    CELERY_ROUTES = {
+        'proj.tasks.add': {'queue': 'celery', 'delivery_mode': 'transient'}
+    }
+
+
 The ``delivery_mode`` changes how the messages to this queue are delivered.
 A value of 1 means that the message will not be written to disk, and a value
 of 2 (default) means that the message can be written to disk.