2017-06-14 1 views
1

Je suis en train d'utiliser la classe JmsOutboundGateway en mode asynchrone. De la documentation:Utilisation du mode asynchrone JmsOutboundGateway avec MessageId au lieu de CorrelationID

asynchrone requiert un <reply-listener/> il nécessite également une corrélationCorrection (généralement JMSCorrelationID) à spécifier. Si l'une de ces conditions n'est pas remplie, async est ignorée.

Mais le système, qui reçoit mes demandes et envoie des réponses, écrit JMSMessageId du message de demande à JMSCorrelationID en réponse. Je peux résoudre ceci si copie générée par JmsOutboundGateway JMSCorrelationID à JMSMessageId. Comment puis-je faire cela au printemps-intégration

<int-jms:outbound-gateway id="requestGateway" 
          connection-factory="jndiConnectionFactory" 

          request-destination="queueInput" 
          request-channel="channel.request.message" 

          reply-destination="queueOutput" 
          reply-channel="channel.response.message" 

          correlation-key="JMSCorrelationID" 
          async="true"> 
    <int-jms:reply-listener max-concurrent-consumers=20 
          concurrent-consumers="10" /> 
    </int-jms:outbound-gateway> 

Répondre

0

(la version printemps-intégration jms 4.3.6.RELEASE) Il est une limitation de courant que l'utilisation de ce style de corrélation n'est pas compatible avec async, bloquant uniquement envoyer/recevoir .

Le problème est que la réponse peut être reçue avant que nous obtenions l'identifiant du message, donc nous ne saurons pas comment le corréler.

Je viens de jeter un coup d'œil au code et je ne pense pas qu'il serait trop difficile de le rendre possible si vous voulez open an 'Improvement' JIRA Issue nous allons jeter un oeil.

+0

Il existe une nouvelle API dans JMS 2.0: 'send (Message message, CompletionListener completionListener)'. Nous pouvons compter sur ce rappel 'CompletionListener' avant que TX soit validé pour la réponse asynchrone dans le conteneur. Olga, votre client devrait considérer ne pas surcharger 'JMSCorrelationID' s'il n'est pas vide. –

+0

votre client ne devrait pas remplacer JMSCorrelationID s'il n'est pas vide - vous voulez dire l'application qui envoie des réponses à mes demandes? –