|
@@ -20,6 +20,7 @@ import threading
|
|
|
|
|
|
from collections import deque
|
|
|
from contextlib import contextmanager
|
|
|
+from copy import copy
|
|
|
|
|
|
from kombu.common import eventloop
|
|
|
from kombu.entity import Exchange, Queue
|
|
@@ -32,6 +33,14 @@ from celery.utils import uuid
|
|
|
event_exchange = Exchange("celeryev", type="topic")
|
|
|
|
|
|
|
|
|
+def get_exchange(conn):
|
|
|
+ ex = copy(event_exchange)
|
|
|
+ if "redis" in conn.transport_cls:
|
|
|
+ # quick hack for #436
|
|
|
+ ex.type = "fanout"
|
|
|
+ return ex
|
|
|
+
|
|
|
+
|
|
|
def Event(type, _fields=None, **fields):
|
|
|
"""Create an event.
|
|
|
|
|
@@ -91,9 +100,12 @@ class EventDispatcher(object):
|
|
|
def __exit__(self, *exc_info):
|
|
|
self.close()
|
|
|
|
|
|
+ def get_exchange(self):
|
|
|
+ return get_exchange(self.connection)
|
|
|
+
|
|
|
def enable(self):
|
|
|
self.publisher = Producer(self.channel or self.connection,
|
|
|
- exchange=event_exchange,
|
|
|
+ exchange=self.get_exchange(),
|
|
|
serializer=self.serializer)
|
|
|
self.enabled = True
|
|
|
for callback in self.on_enabled:
|
|
@@ -166,11 +178,14 @@ class EventReceiver(object):
|
|
|
self.node_id = node_id or uuid()
|
|
|
self.queue_prefix = queue_prefix
|
|
|
self.queue = Queue('.'.join([self.queue_prefix, self.node_id]),
|
|
|
- exchange=event_exchange,
|
|
|
+ exchange=self.get_exchange(),
|
|
|
routing_key=self.routing_key,
|
|
|
auto_delete=True,
|
|
|
durable=False)
|
|
|
|
|
|
+ def get_exchange(self):
|
|
|
+ return get_exchange(self.connection)
|
|
|
+
|
|
|
def process(self, type, event):
|
|
|
"""Process the received event by dispatching it to the appropriate
|
|
|
handler."""
|