J'ai un processus qui implique l'envoi d'un message JMS. Le processus fait partie d'une transaction. Si une partie ultérieure de la transaction échoue, une partie qui est après une partie précédente qui a envoyé le message, j'ai besoin d'annuler le message. Une pensée que j'ai eu était de quelque part mis sur le message qu'il ne doit pas être ramassé pendant un certain laps de temps, et si j'ai besoin de revenir en arrière, alors je pourrais aller annuler le message. Ne sachant pas de messagerie, je ne sais pas si l'idée est possible. Ou, y a-t-il une meilleure idée? MerciJMS rollback
Répondre
Vous pouvez utiliser JMS et JTA (Java Transaction API) ensemble - see here. Dans ce cas, l'envoi d'un message JMS ou la consommation d'un message reçu se produit réellement de manière atomique dans le cadre de la validation de la transaction.
Qu'est-ce que cela signifie? Si la transaction échoue ou est annulée, le message "envoyé" ne disparaît pas et les messages "reçus" ne sont pas réellement consommés. Tout est géré pour vous par votre fournisseur JMS et JTA.
Vous devez utiliser une implémentation JMS prenant en charge JTA. On dirait que vous utilisez déjà des transactions, il pourrait donc être question de faire une configuration pour y arriver (en agitant la main vigoureusement ...).
J'ai déjà eu l'occasion d'utiliser ceci (BEA WebLogic 7 avec BEA WebLogic Integration). Travaillé comme annoncé - "le monde extérieur" n'a vu aucun impact des choses de JMS que j'ai essayées à moins que la transaction s'est engagée avec succès.
Ce que vous avez décrit est une transaction XA. Cela permet à une transaction de s'étendre sur plusieurs couches, à savoir le fournisseur JMS, la base de données ou tout autre EIS. La plupart des conteneurs peuvent être configurés pour utiliser à la fois des transactions non XA et aucune transaction XA, vérifiez donc les paramètres de votre conteneur!
Par exemple, si vous utilisez JMS avec des transactions XA, les opérations suivantes sont possibles.
Start Transaction
|
DB Insert
|
Send JMS Msg
|
More DB Inserts
|
Commit Transaction <- Only at this point will the database records be inserted and the JMS message sent.
XA tranactions ne sont disponibles que dans des conteneurs pleins Java EE donc les transactions XA ne sont pas disponibles dans Tomcat.
Bonne chance!
Karl
- 1. MbUnit Rollback
- 2. Instruction rollback d'insertion
- 3. sql rollback transaction 2005
- 4. IDbTransaction Rollback Timeout
- 5. JMS setTimeToLive
- 6. Oracle Rollback Segments et ADO.NET
- 7. Rollback avec linq à sql?
- 8. savepoint validation rollback dans mysql
- 9. Tuning JMS File Store
- 10. JMS createQueue Problème
- 11. Longue vie aux sessions JMS. Le maintien des connexions JMS/sessions JMS est-il toujours une mauvaise pratique?
- 12. classe personnalisée d'installation, méthode Rollback jamais appelé
- 13. Besoin d'aide dans la transaction SQL Rollback
- 14. Performance JMS: BytesMessage vs ObjectMessage
- 15. Traitement parallèle des messages JMS?
- 16. Pont JMS dans WebSphere 7.0
- 17. Spring JMS Message Listener Container
- 18. EJB JMS Timer, un échantillon?
- 19. POC sur JMS sur Jboss
- 20. Message Driven Bean Selectors (JMS)
- 21. Comment configurer ConnectionFactory JMS sur JBossAS5?
- 22. Utilisation de ajax pour appeler JMS
- 23. JBoss ne traite pas les messages JMS
- 24. Besoin d'aide avec Java JMS ResourceAllocationException
- 25. Comment arrêter un Spring JMS MessageListenerAdapter
- 26. Classe .NET TransactionScope et T-SQL TRAN COMMIT et ROLLBACK
- 27. Comment puis-je implémenter commit/rollback pour MySQL en PHP?
- 28. comment éviter une migration de rollback défectueuse dans ruby?
- 29. Contrôle du serveur JMS: trop de MDBeans créés (weblogic)
- 30. Connectivité aux ordinateurs centraux à l'aide de JMS
Veuillez également prendre en compte la performance des frais généraux: http://stackoverflow.com/questions/12305900/performance-overhead-of-xa-data-sources-best-practices – Vadzim