2016-03-18 41 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

非常感谢你这么快速的回应,解决了这个问题! –