【问题标题】:Converting a twisted consumer into a Service将扭曲的消费者转换为服务
【发布时间】: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 东西变成常规服务?

【问题讨论】:

    标签: rabbitmq twisted pika


    【解决方案1】:

    你必须使用 twistd 运行 .tac 文件:

    $ twistd -ny services.tac
    

    【讨论】:

    • 是的,我这样做了。好吧,systemd 运行一个运行 twistd -ny services.tac 的脚本。当只有这些 connectTCP 类型服务中的一个,或者当有任何数量的其他基于 TCPServer 的、定义良好的服务(来自扭曲标准或基于类似库)时,它可以工作。当我尝试将它们放入同一个 .tac 时,它会中断。
    • 通常需要一个完整的示例才能让任何人了解情况并提供正确答案。考虑将有关您正在做什么的所有缺失信息添加到您的问题中。
    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多