Преглед изворни кода

Add CELERY_EVENT_PERSISTENT option for the ability to use transient events

Ask Solem пре 15 година
родитељ
комит
7d91c13058
2 измењених фајлова са 7 додато и 0 уклоњено
  1. 2 0
      celery/conf.py
  2. 5 0
      celery/messaging.py

+ 2 - 0
celery/conf.py

@@ -84,6 +84,7 @@ _DEFAULTS = {
     "CELERY_EVENT_EXCHANGE": "celeryevent",
     "CELERY_EVENT_EXCHANGE_TYPE": "direct",
     "CELERY_EVENT_ROUTING_KEY": "celeryevent",
+    "CELERY_EVENT_PERSISTENT": True,
     "CELERY_EVENT_SERIALIZER": "json",
     "CELERY_RESULT_EXCHANGE": "celeryresults",
     "CELERY_RESULT_EXCHANGE_TYPE": "direct",
@@ -247,6 +248,7 @@ def prepare(m, source=settings, defaults=_DEFAULTS):
     m.EVENT_EXCHANGE = _get("CELERY_EVENT_EXCHANGE")
     m.EVENT_EXCHANGE_TYPE = _get("CELERY_EVENT_EXCHANGE_TYPE")
     m.EVENT_ROUTING_KEY = _get("CELERY_EVENT_ROUTING_KEY")
+    m.EVENT_PERSISTENT = _get("CELERY_EVENT_PERSISTENT")
     m.EVENT_SERIALIZER = _get("CELERY_EVENT_SERIALIZER")
 
     # :--- AMQP Backend settings                    <-   --   --- - ----- -- #

+ 5 - 0
celery/messaging.py

@@ -146,6 +146,9 @@ class EventPublisher(Publisher):
     exchange_type = conf.EVENT_EXCHANGE_TYPE
     routing_key = conf.EVENT_ROUTING_KEY
     serializer = conf.EVENT_SERIALIZER
+    auto_delete = not conf.EVENT_PERSISTENT
+    delivery_mode = conf.EVENT_PERSISTENT and 2 or 1
+    durable = conf.EVENT_PERSISTENT
 
 
 class EventConsumer(Consumer):
@@ -154,6 +157,8 @@ class EventConsumer(Consumer):
     exchange = conf.EVENT_EXCHANGE
     exchange_type = conf.EVENT_EXCHANGE_TYPE
     routing_key = conf.EVENT_ROUTING_KEY
+    auto_delete = not conf.EVENT_PERSISTENT
+    durable = conf.EVENT_PERSISTENT
     no_ack = True