簡體   English   中英

將郵件從Twisted Client發布到ZeroMQ

[英]Publishing messages from Twisted Client to ZeroMQ

在我的Twisted應用程序中,我想將消息發布到ZeroMQ消息隊列中。 我可以在Protocol類中做以下類似的事情嗎?

from twisted.internet import protocol,reactor
import zmq

class MyClient(protocol.Protocol):
  def __init__(self):
    self.context = zmq.Context()
    self.socket =  context.socket(zmq.PUB)
    self.socket.bind("tcp://127.0.0.1:5000")

  def dataReceived(self,data):
     #Do something with the data to get a result
     #...
     #Publish to 0mq
     self.socket.send(result)

#Code below for factory and initializing reactor
#...

reactor.run()

上面的工作是否可行? 如果它不起作用,那我應該使用txZMQ( https://github.com/smira/txZMQ )嗎?

謝謝

Socket.send方法的默認行為是阻塞,直到消息在套接字上排隊為止。 如果套接字隊列已滿,則在套接字上沒有空間將消息排隊之前,Twisted應用程序中不會發生其他任何事情。

send方法的NOBLOCK標志告訴zmq如果無法將消息排隊,則引發異常。 但是,如果執行此操作,則必須擔心失敗:

try:
    self.socket.send(result, flags=zmq.NOBLOCK)
except zmq.Again:
    # Failed to queue the message: what now?

使用txZMQ軟件包會更簡單,該軟件包將ZMQ與Twisted事件循環集成在一起。 文檔中示例建議您在txZMQ中實施發布,如下所示:

factory = ZmqFactory()
publisher = ZmqPubConnection(factory, endpoint)
publisher.publish(message)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM