[英]Message queue proxy in Python + Twisted
我想實現一個輕量級的Message Queue代理。 它的工作是從Web應用程序(PHP)接收消息,並將它們異步發送到Message Queue服務器。 該代理的原因是MQ並不總是可用,有時會滯后甚至下降,但是我想確保消息已傳遞,並且Web應用程序立即返回。
因此,PHP會將消息發送到在同一主機上運行的MQ代理。 如果發生崩潰,該代理會將消息保存到SQLite進行持久化。 同時,當連接可用時,它將從SQLite批量發送消息到MQ,然后從SQLite刪除消息。
現在,按照我的理解,此服務中包含以下組件:
我當時在考慮使用Twisted for#1(TCPServer),但是我在將其與不是事件驅動的其他點進行集成時遇到了問題。 直覺告訴我,這些要點中的每一個都應在單獨的線程中運行,因為所有這些點都受IO約束並且彼此獨立,但是我可以輕松地將它們放在單個線程中。 即使這樣,除了Twisted的主循環外,我也找不到任何關於如何實現此工作線程的好例子(對我而言)。
我開始的示例是chatserver.py ,它使用service.Application和internet.TCPServer對象。 如果在創建TCPServer服務之前啟動了自己的線程,它將運行幾次,但是它將停止並且永遠不會再次運行。 我不確定為什么會這樣,但這可能是因為我沒有正確使用Twisted線程。
關於如何實現單獨的工作線程並保持Twisted的任何建議? 您有其他構想嗎?
您基本上是在考慮為郵件服務器編寫一個臨時擴展,它的工作就是提供您所要求的可靠性。
相反,也許您應該在計划運行該新代理的硬件上運行並在其上運行另一個MQ節點。 當其他節點超載或脫機時,新節點應負責持久化和中繼您傳遞給它的消息。
也許在Twisted中使用單獨的線程來繞過阻塞調用並不是您的最佳選擇,但有時最不危險的解決方案是最好的。 這是一個鏈接,向您展示如何將線程集成到Twisted中:
http://twistedmatrix.com/documents/10.1.0/core/howto/threading.html
有時候,容易實現的時間要比數小時/數天的研究快,而事實證明這一切都是徒勞的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.