2016-05-25 7 views
0

Ich habe eine Frühlings App mit JMS (ActiveMQ)Wann ist nützlich das @ JmsListener id Attribut?

Ich habe folgende Arbeiten:

@Bean 
public DefaultJmsListenerContainerFactory jmsListenerTopicContainerFactoryForSection01(ConnectionFactory selectedConnectionFactory) { 
     DefaultJmsListenerContainerFactory djlcf = new DefaultJmsListenerContainerFactory(); 
     djlcf.setClientId("jmsListenerTopicContainerFactoryForSection01"); 
     djlcf.setConnectionFactory(selectedConnectionFactory); 
     djlcf.setPubSubDomain(true); //True 
     djlcf.setConcurrency("1"); 
     djlcf.setAutoStartup(true); 
     djlcf.setSubscriptionDurable(true); 
     return djlcf; 
} 

Und über @JmsListener ich habe:

@JmsListener(destination="springintegration.queue.local.to.section01", 
     containerFactory="jmsListenerQueueContainerFactoryForSection01") 
public void receiveToSection01(Message message){ 
     logger.info("receiveToSection01: {}", message.toString()); 
} 

ich in ActiveMQWebkonsole bestätigen das existiert in Aktive Abonnenten die jmsListenerQueueContainerFactoryForSection01

Bis hier geht es mir gut.

Jetzt benutze ich die @JmsListener ‚s id Attribute wie:

@JmsListener(destination="springintegration.queue.local.to.section01", 
      id="abc", 
      containerFactory="jmsListenerQueueContainerFactoryForSection01") 
public void receiveToSection01(Message message){ 
    logger.info("receiveToSection01: {}", message.toString()); 
} 

ich nie den idabc in dem ActiveMQ Webkonsole sehen kann. Ich sehe immer jmsListenerQueueContainerFactoryForSection01

  • Ich weiß, dass @JmsListenerGleichzeitigkeit Attribut kann

die DefaultJmsListenerContainerFactorysetConcurrency Methode überschreiben, aber es gilt nicht für das id Attribut.

Nach dem @JmsListener'id api sagt

Die eindeutige Kennung des Behälters diesen Endpunkt zu verwalten. Wenn keine angegeben ist, wird automatisch eine generiert.

Deshalb

  1. Wann ist nützlich Verwendung der @JmsListenerid Attribut?
  2. Wo ich den @JmsListenerid sehen (abc in diesem Fall - oder sogar automatisch generierte nach dem API)

Antwort

1

Das ID-Attribut um den Behälter zu verwalten verwendet wird - die JmsListenerEndpointRegistry Bohne Methoden hat:

getListenerContainerIds() getListenerContainer(String id)

Diese Sie stoppen können/Start enthalten die Die Container selbst sind im Kontext nicht als Beans registriert, so dass Sie auf diese Weise keine Referenzen erhalten.

+0

Danke, scheint es für die interne Kontrolle, und durch diese Methoden kann ich diese spezifischen Daten erhalten, interessant dieser Ansatz ... –

+0

Über 'JmsListenerEndpointRegistry' ist etwas zu ergänzen in http://stackoverflow.com/a/32719138/3665178 –