更新2015年8月:對於想要使用消息傳遞的人,我目前會推薦使用zeromq。可以用作pykka的補充或完全替代。如何發送RabbitMQ消息給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'。 – dano 2015-02-17 00:30:31
要重現此行爲,請分享更多代碼,如ApplicationServiceClass和其他相關代碼嗎? – Vinkal 2015-02-17 14:32:26
@dano我需要併發進程在對隊列消息的響應中運行。 (想想某種密集的數據分析)。 – drozzy 2015-02-19 02:30:04