擅长:python、mysql、java
<p>最后,我找到了RabbitMQ后端的正确解决方案:</p>
<pre><code>class BrokerClient(object):
clients = []
@staticmethod
def instance():
if not hasattr(BrokerClient, '_instance'):
BrokerClient._instance = BrokerClient()
return BrokerClient._instance
def __init__(self):
self.connection = BrokerConnection(settings.BROKER_URL)
self.consumer = Consumer(self.connection.channel(), [queue, ], callbacks=[self.process_task])
self.consumer.consume()
io_loop = tornado.ioloop.IOLoop.instance()
for sock, handler in self.connection.eventmap.items():
def drain_nowait(fd, events):
handler()
io_loop.add_handler(sock.fileno(), drain_nowait, l.READ | l.ERROR)
def process_task(self, body, message):
#something
message.ack()
def add_client(self, client):
self.clients.append(client)
def remove_client(self, client):
self.clients.remove(client)
</code></pre>
<p>对于其他后端,您可以使用问题中发布的解决方案</p>
<p>注意:不能与librabbitmq一起使用</p>