【发布时间】:2015-02-08 17:52:15
【问题描述】:
2015 年 8 月更新:对于想要使用消息传递的人,我目前推荐 zeromq。可以作为 pykka 的补充或完全替代使用。
如何监听 RabbitMQ 队列中的消息,然后将它们转发给 Pykka 中的参与者?
目前,当我尝试这样做时,我得到了奇怪的行为并且系统停止了停止。
以下是我实现我的演员的方式:
class EventListener(eventlet.EventletActor):
def __init__(self, target):
"""
:param pykka.ActorRef target: Where to send the queue messages.
"""
super(EventListener, self).__init__()
self.target = target
def on_start(self):
ApplicationService.listen_for_events(self.actor_ref)
这是我在 ApplicationService 类中的方法,它应该检查队列中的新消息:
@classmethod
def listen_for_events(cls, actor):
"""
Subscribe to messages and forward them to the given actor.
"""
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='test')
def callback(ch, method, properties, body):
message = pickle.loads(body)
actor.tell(message)
channel.basic_consume(callback, queue='test', no_ack=True)
channel.start_consuming()
似乎start_consuming 无限期阻塞。有没有办法让我自己定期“轮询”队列?
【问题讨论】:
-
您在一个程序中同时使用
pika和pykka有什么特别的原因吗?似乎您最好单独使用pykka。 -
为了重现此行为,您能否在这里分享更多代码,例如 ApplicationServiceClass 和其他依赖代码?
-
@dano 我需要并发进程来运行以响应队列消息。 (想想某种密集的数据分析)。
标签: python rabbitmq actor pika pykka