【发布时间】:2017-03-31 19:10:24
【问题描述】:
我正在尝试将基于扭曲的鼠兔 (RabbitMQ) 消费者纳入服务。以下是我目前实施的相关内容:
worker.py
import pika
from pika.adapters import twisted_connection
from twisted.internet import defer, reactor, protocol, task
@defer.inlineCallbacks
def run(connection):
channel = yield connection.channel()
yield channel.queue_declare(
queue='event_queue',
durable=True, auto_delete=False, exclusive=False
)
queue_object, consumer_tag = yield channel.basic_consume(
queue='event_queue', no_ack=False
)
l = task.LoopingCall(process, queue_object, connection)
l.start(0.01)
@defer.inlineCallbacks
def process(queue_object, connection):
ch, method, properties, body = yield queue_object.get()
if body:
print "Do stuff here"
yield ch.basic_ack(delivery_tag=method.delivery_tag)
def start():
parameters = pika.ConnectionParameters()
cc = protocol.ClientCreator(
reactor, twisted_connection.TwistedProtocolConnection, parameters
)
d = cc.connectTCP(MQ_SERVER, MQ_SERVER_PORT)
d.addCallback(lambda x: x.ready)
d.addCallback(run)
使用以下脚本运行时,此工作器工作正常:
runserver.py
import worker
from twisted.internet import reactor
if __name__ == '__main__':
worker.start()
reactor.run()
我不知道如何让它与 .tac 文件中的其他服务一起使用。
services.tac
from twisted.application import service
application = service.Application("An application")
from other import get_service
other_service = get_service()
other_service.setServiceParent(application)
import worker
worker.start()
此 tac 文件在运行时不起作用。没有其他服务的相同代码似乎可以工作,但是当启用其他服务时它似乎不起作用。相反,它返回一个超时延迟。
有没有办法可以将这个需要延迟的 connectTCP 东西变成常规服务?
【问题讨论】: