2017-03-31 44 views
0

我正在尝试将基于扭曲的pika(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() 

我看不出来弄清楚如何让这个工作与ot她的服务在.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事件转化为常规服务?

回答

0

你必须运行.tac文件与twistd来:

$ twistd -ny services.tac 
+0

是的,我这样做。那么systemd运行一个运行twistd -ny services.tac的脚本。当只有这些connectTCP类型服务中的一个时,或者当有任何其他基于TCPServer的,定义明确的服务(来自扭曲标准或基于类似库)时,它都可以工作。当我尝试将它们放入相同的.tac文件时,它会中断。 –

+0

在任何人都能理解情况并提供正确答案之前,经常需要一个完整的示例。考虑添加关于您对问题所做的所有缺失信息。 –