Start e Stop JMS Ascoltatore utilizzo di Primavera

Quindi la domanda è come temporanea interrompere e avviare un listener jms creato utilizzando molla con l’aratura modo :

<amq:connectionFactory id="exampleJmsFactory" brokerURL="tcp://${jms.broker.url}" />

<jms:listener-container concurrency="1" connection-factory="exampleJmsFactory"  destination-type="queue" message-converter="exampleMessageConverter">
        <jms:listener destination="incoming.example.client.queue" ref="exampleProductsMessageConsumer" method="consume"/>
</jms:listener-container>


<bean id="exampleProductsMessageConsumer" class="com.unic.example.jms.receive.JmsExampleProductsMessageConsumer" scope="tenant"/>

Quindi, in pratica, qual è il problema. Abbiamo un init/meccanismo di aggiornamento che il client può eseguire in qualsiasi momento e durante questo init/aggiornamento voglio interrompere il consumo di tutti i messaggi, perché il sistema è inutilizzabile in questo momento e se un messaggio proviene sarà perso.

Così come posso interrompere l’ascoltatore o l’ascoltatore contenitore o l’intera connessione che utilizza l’API. Ho scoperto che una classe AbstractJmsListeningContainer stop/start, ma come posso farlo ? Voglio dire, nessuno di questo jms: di ascolto e di ascoltatore-contenitori hanno un nome o qualcosa di simile.

OriginaleL’autore JOKe | 2012-07-10

3 Replies
  1. 11

    È possibile assegnare un id per l’ascoltatore-contenitore. Quindi ottenere un riferimento ad esso, chiamando getBean o ottenere iniettato. Questo vi darà una AbstractJmsListeningContainer su cui è possibile chiamare start /stop.

    beh, prima di tutto io non posso assegnare id davvero per l’ascoltatore-contenitore. Il secondo problema è che in realtà ho 3 ascoltatori non solo uno, quindi è 1 ascoltatore-contenitore con 3 ascoltatori, in modo che se cerco di ottenere dalla classe DefaultMessageListenerContainer o AbstractJmsListeningContainer mi dice che non trova il 3. Credo che per ogni ascoltatore si crea un listener contenitore di così non riesco a ricerca per classe/tipo di
    ahh l’oggetto listener di per sé avere un id che è passato al contenitore proviamo

    OriginaleL’autore gkamal

  2. 6

    Sì quello è fare il trucco.

    <jms:listener-container concurrency="1" connection-factory="exampleJmsFactory"  destination-type="queue" message-converter="exampleMessageConverter">
            <jms:listener id="exampleProductsMessageListener" destination="incoming.example.client.queue" ref="exampleProductsMessageConsumer" method="consume"/>
    </jms:listener-container>
    
    
    
    DefaultMessageListenerContainer exampleProductsMessageListener= Registry.getApplicationContext().getBean("exampleProductsMessageListener", DefaultMessageListenerContainer.class);
    exampleProductsMessageListener.stop();
    Quanto male fa quando ho 10 ascoltatori, chiamando lo stesso consumano metodo. Prima devo identificare il listener è chiamata a consumare il mio metodo. questo renderà questo codice ingombrante. Avete altri suggerimenti per lo stesso obiettivo.
    Quando ho stop() il mio ascoltatore, il isRunning() return False, ma ho ancora i messaggi attraverso il MQueue… Qualche idea ?

    OriginaleL’autore JOKe

  3. 1

    È anche possibile ottenere una sospensione del il messageListenerContainer, e richiamare stop() su di esso:

    @javax.annotation.Resource //autowire by name
     private AbstractJmsListeningContainer myMessageListenerContainer;
    
     myMessageListenerContainer.stop();
    
     I'm using the more verbose setup of this container:
     <bean id="myMessageListenerContainer" class="org.springframework.jms.listener.DefaultMes sageListenerContainer">
     <property name="connectionFactory" ref="jmsConnectionFactory"/>
     <property name="destination" ref="myQueue"/>
     <property name="messageListener" ref="myListener"/>
     <property name="autoStartup" value="true" />
     </bean>

    Qui si può vedere che è possibile impostare autoStartup a false se non si desidera che il listenerContainer per avviare automaticamente.

    OriginaleL’autore Anurag Kumar

Lascia un commento