1

J'utilise différentes usines de connexion pour envoyer et recevoir des messages, ayant des problèmes avec des problèmes de validation partielle en cas de défaillance de livraison. jms:message-driven-channel-adapter utilise le receiveConnectionFactory pour recevoir les messages de la file d'attente. jms:outbound-channel-adapter utilise le deliverConnectionFactory pour envoyer les messages plusieurs aux files d'attente en aval. Nous avons seulement un JmsTransactionManager qui utilise le receiveConnectionFactory et le jms:outbound-channel-adapter configuré avec session-transacted="true". En cas d'exception MQ sur une destination, la validation partielle se produit et la validation de la file d'échecs se produit. Je cherche à voir s'il me manque une configuration pour rejoindre les transactions afin que la validation partielle ne se produise jamais.Comment joindre les transactions Spring JMS à partir de deux fabriques de connexions différentes?

J'ai essayé avec une seule usine de connexion à la fois envoyer et recevoir (receiveConnectionFactory) et la validation paritaire ne se passe pas, tout fonctionne comme prévu.

Répondre

2

J'ai essayé avec une seule usine de connexion à la fois envoyer et recevoir (receiveConnectionFactory) et la validation paritaire ne se passe pas, tout fonctionne comme prévu.

C'est la bonne façon de procéder dans votre cas.

Je vois que vos deux ConnectionFactories ne sont différents que par leurs objets. Tout reste ressemble au même serveur MQ cible.

Si vous ne pouvez certainement pas vivre avec un seul ConnectionFactory, vous devriez envisager d'utiliser JtaTransactionManager ou configurer org.springframework.data.transaction.ChainedTransactionManager pour deux JmsTransactionManagers - une par usine de connexion.

Voir Dave article de Syer sur la question: https://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html

+0

Merci @Artem pour la réponse rapide. Oui, en ce moment nous sommes connectés au même QManager pour recevoir et envoyer. Nous préparons la future implémentation de QManager différent pour l'envoi et la réception. Je vais essayer d'implémenter JtaTransactionManager ou ChainedTransactionManager et voir si cela résout le problème. – Selvakumar

+1

Mise à jour - J'ai ajouté deux JmsTransactionManagers - un par fabrique de connexions et ChainedTransactionManager pour joindre les transactions. Tout fonctionne comme prévu, pas de commits partiels. Merci @artem pour avoir posté la solution. – Selvakumar