2012-12-25 22 views
1

使用情況是這樣的:我如何讀取關鍵值對,並訂閱價值變化 - 即最後值緩存?這裏

  • 我有一個數據/值出版商
  • 我有多個值的消費者(或用戶),當他們開始需要讀/獲取值,然後訂閱後續更新

目標是讓發佈者和訂閱者都只做「一件」事情。

例子:一個發佈者發佈outside.temperature=28和多用戶將在新的信息作出反應,如開啓加熱器,發送了一條短信:「把秋褲」和更新一些監視器上一些圖形。

我今天什麼(工作)就是Apache ActiveMQ的隊列與任何地方的用戶可以query outside.temperature並讓發佈商(重新)發送的最新值。回覆發送給發送查詢的消費者(回覆隊列)。 將新值發佈到具有相同名稱的主題(outside.temperature)。 每次訂閱者(重新)啓動時,都會發生這種情況:查詢當前狀態,訂閱更新。

這一切似乎過於複雜,因爲用戶必須知道如何做兩件事情:

  • 知道如何提出一個值(隊列和應答隊列),即輪詢
  • 知道如何訂閱未來值(主題),即訂閱推

和出版商知道如何做兩個thinkgs:

  • 知道如何回答查詢(隊列),回答調查請求
  • 知道如何發佈新的值(主題),推新值

這裏的目標是有一些中間件軟件,將:一鍵

    • 保持(並持續)最後已知的值更改發佈到該密鑰的所有用戶,即發佈訂閱
    • 發送最新的已知值(推)到一個新的用戶

    這會降低發佈者和訂閱者的複雜度。

    我一直在尋找Redis來解決這個問題,但PUBSUB功能只取代了上面例子中的主題,而不是用戶啓動(和回答)當前值輪詢,即查詢/隊列部分。

    我一直在尋找一個ZooKeeper,它是手錶,雖然它看起來能滿足我的需求,但它過於複雜,需要相當多的代碼。

    我一直在看ØMQ(ZeroMQ),看到術語Last Value Caching, LVC。這裏的建議是在發佈者和訂閱者之間建立一個代理。

    沒有關於RabbitMQ的LVC擴展,像https://github.com/simonmacmullen/rabbitmq-lvc-plugin

    我的問題是,如果有,它被添加PUB-子帶內置最後一個值緩存,不需要自定義代理服務器或插件其他一些FLOSS產品?

  • 回答

    0

    有幾種方法可以在ZeroMQ上做到這一點;請閱讀http://zguide.zeromq.org/page:all#Last-Value-Caching獲取簡單模式,然後http://zguide.zeromq.org/page:all#Reliable-Publish-Subscribe-Clone-Pattern是更復雜的方法。

    請注意,這兩種方法在中間使用一塊;但是,您可以非常輕鬆地使第一個LVC模式在發佈服務器中正常工作。

    +0

    是的,你基本上自己寫了最後一個值緩存。 (Clone模式基本上就是我已經擁有的,pubsub和查詢/請求。) 我正在尋找一種FLOSS產品,它具有帶有內置最新值緩存的pubsub,開箱即用。 –