2016-03-18 70 views
6

我正在構建一個創建主題樹的擴散解決方案。如何刪除沒有訂閱者的主題?

我按需創建主題以反映從RabbitMQ Feed收到的值。每個主題都有一個內存開銷,所以我希望在一段時間內沒有訂閱者時刪除該主題。

這可以通過統一的Java API完成嗎?

+0

從原始隊列或從樹中移除?此外,如果您已經嘗試寫出骨架代碼,請添加(通過使用[編輯])到您的問題。 –

回答

6

TopicEventListener(TopicControl功能的一部分)提供了此功能。當話題有0個用戶時,以及當一個話題有至少1個用戶時,提供單獨的回叫。

例子:

public TopicEventListenerClient() { 
     session = Diffusion.sessions().principal("admin").password("password").open("ws://localhost:8080"); 
     topicControl = session.feature(TopicControl.class); 
     topicControl.addTopicEventListener("rabbitMQ/foo", new TopicEventListener() { 

      @Override 
      public void onClose(String arg0) { 
       LOG.info("Listener closed"); 
      } 

      @Override 
      public void onError(String arg0, ErrorReason arg1) { 
       LOG.info("Error on listener: " + arg1); 
      } 

      @Override 
      public void onRegistered(String arg0, Registration arg1) { 
       LOG.info("Listener registered"); 
      } 

      @Override 
      public void onHasSubscribers(String arg0) { 
       LOG.info("Topic: " + arg0 + " has at least 1 subscriber"); 
      } 

      @Override 
      public void onNoSubscribers(String arg0) { 
       LOG.info("Topic: " + arg0 + " has no subscribers"); 
      } 
     }); 
    } 

希望這有助於!

+0

非常感謝你這麼快速的迴應,解決了這個問題! –