Parcourir la source

default_routing key and exchange now taken from default_queue. Closes #2894

Ask Solem il y a 8 ans
Parent
commit
495d3612c1
4 fichiers modifiés avec 39 ajouts et 8 suppressions
  1. 3 3
      celery/app/defaults.py
  2. 14 0
      celery/app/utils.py
  3. 0 5
      docs/userguide/routing.rst
  4. 22 0
      t/unit/app/test_amqp.py

+ 3 - 3
celery/app/defaults.py

@@ -205,11 +205,11 @@ NAMESPACES = Namespace(
         compression=Option(type='string', old={'celery_message_compression'}),
         create_missing_queues=Option(True, type='bool'),
         default_delivery_mode=Option(2, type='string'),
-        default_exchange=Option('celery'),
-        default_exchange_type=Option('direct'),
         default_queue=Option('celery'),
+        default_exchange=Option(None, type='string'),  # taken from queue
+        default_exchange_type=Option('direct'),
+        default_routing_key=Option(None, type='string'),  # taken from queue
         default_rate_limit=Option(type='string'),
-        default_routing_key=Option('celery'),
         eager_propagates=Option(
             False, type='bool', old={'celery_eager_propagates_exceptions'},
         ),

+ 14 - 0
celery/app/utils.py

@@ -105,6 +105,20 @@ class Settings(ConfigurationView):
             self.first('broker_url', 'broker_host')
         )
 
+    @property
+    def task_default_exchange(self):
+        return self.first(
+            'task_default_exchange',
+            'task_default_queue',
+        )
+
+    @property
+    def task_default_routing_key(self):
+        return self.first(
+            'task_default_routing_key',
+            'task_default_queue',
+        )
+
     @property
     def timezone(self):
         # this way we also support django's time zone.

+ 0 - 5
docs/userguide/routing.rst

@@ -89,12 +89,7 @@ configuration:
 
 .. code-block:: python
 
-    from kombu import Exchange, Queue
-
     app.conf.task_default_queue = 'default'
-    app.conf.task_queues = (
-        Queue('default', Exchange('default'), routing_key='default'),
-    )
 
 .. _routing-autoqueue-details:
 

+ 22 - 0
t/unit/app/test_amqp.py

@@ -159,6 +159,28 @@ class test_Queues:
         assert queues[qname].queue_arguments == expected
 
 
+class test_default_queues:
+
+    @pytest.mark.parametrize('name,exchange,rkey', [
+        ('default', None, None),
+        ('default', 'exchange', None),
+        ('default', 'exchange', 'routing_key'),
+        ('default', None, 'routing_key'),
+    ])
+    def test_setting_default_queue(self, name, exchange, rkey):
+        self.app.conf.task_queues = {}
+        self.app.conf.task_default_exchange = exchange
+        self.app.conf.task_default_routing_key = rkey
+        self.app.conf.task_default_queue = name
+        assert self.app.amqp.queues.default_exchange.name == exchange or name
+        queues = dict(self.app.amqp.queues)
+        assert len(queues) == 1
+        queue = queues[name]
+        assert queue.exchange.name == exchange or name
+        assert queue.exchange.type == 'direct'
+        assert queue.routing_key == rkey or name
+
+
 class test_AMQP:
 
     def setup(self):