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事件转化为常规服务?
是的,我这样做。那么systemd运行一个运行twistd -ny services.tac的脚本。当只有这些connectTCP类型服务中的一个时,或者当有任何其他基于TCPServer的,定义明确的服务(来自扭曲标准或基于类似库)时,它都可以工作。当我尝试将它们放入相同的.tac文件时,它会中断。 –
在任何人都能理解情况并提供正确答案之前,经常需要一个完整的示例。考虑添加关于您对问题所做的所有缺失信息。 –