2016-03-18 4 views
6

Ich baue eine Diffusionslösung, die einen Baum von Themen erstellt.Wie entferne ich ein Thema, wenn es keine Abonnenten hat?

Ich erstelle Themen auf Anfrage, um Werte aus einem RabbitMQ-Feed zu reflektieren. Jedes Thema hat einen Speicheraufwand, daher möchte ich das Thema entfernen, wenn es seit einiger Zeit keine Abonnenten mehr hat.

Wie kann dies mit der vereinheitlichten Java-API geschehen?

+0

Aus der ursprünglichen Warteschlange oder von Ihrem Baum entfernen? Auch wenn Sie bereits versucht haben, auch nur einen Skelettcode zu schreiben, fügen Sie bitte (indem Sie [bearbeiten]) es zu Ihrer Frage hinzu. –

Antwort

6

Die TopicEventListener (Teil der TopicControl-Funktion) bietet diese Funktionalität. Bereitstellung von individuellen Rückrufen, wenn ein Thema 0 Teilnehmer hat, sowie wenn ein Thema mindestens 1 Teilnehmer hat.

Beispiel:

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"); 
      } 
     }); 
    } 

hoffe, das hilft!

+0

Vielen Dank für die schnelle Antwort, die das Problem gelöst hat! –