2016-03-18 25 views
6

Sto costruendo una soluzione di diffusione che crea un albero di argomenti.Come rimuovere un argomento quando non ci sono abbonati?

Sto creando argomenti su richiesta per riflettere i valori ricevuti da un feed RabbitMQ. Ogni argomento ha un costo di memoria, quindi sto cercando di rimuovere l'argomento una volta che non ha avuto abbonati per qualche tempo.

Come è possibile farlo con l'API Java unificata?

+0

Rimuovere dalla coda originale o dall'albero? Inoltre, se hai già provato a scrivere anche un codice scheletrico, per favore aggiungi (usando [modifica]) alla tua domanda. –

risposta

6

Il TopicEventListener (parte della funzione TopicControl) fornisce questa funzionalità. Fornire singoli callback per quando un argomento ha 0 iscritti, così come quando un argomento ha almeno 1 iscritto.

Esempio:

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

Spero che questo aiuti!

+0

Grazie mille per una risposta così rapida, che ha risolto il problema! –