2016-06-26 2 views
0

J'utilise 1 session, 1 MessageListener asynchrone pour recevoir des messages et traiter chaque message dans un thread. Une fois le thread terminé, la validation de la session ou l'annulation sera utilisée pour décider si le message peut être remis ou non. Mais je m'inquiète vraiment à propos de la déclaration commit/rollback pourrait avoir un effet sur les messages qui sont en train de traiter dans les threads. Par exempleSession transactionnelle JMS: Commit/rollback pour un message spécifique

1 session 
1 msg listener 

---TIME----> 
[MSG1: receive] --------------- processing -----------------> [MSG1: rollback] 
       [MSG2: receive] --------------> [MSG2: commit] 


- At the time MSG2 commit, may be MSG1 also be committed? 
If it is right, can I execute commit/rollback for specific MSG only? 

Répondre

0

Vous n'avez partagé aucun code mais j'essaierai de répondre.

D'abord, cela ne semble pas une bonne stratégie,

session de validation ou annulation sera utilisé pour décider message peut être rejouée ou non

Je pense, vous devez utiliser un message mode d'accusé de réception pour décider de la livraison. Définissez le mode d'accusé de réception approprié dans les messages selon vos besoins.

Deuxièmement, vous semblez mélanger la présence de threads avec JMS Session étant traité ou non. Pour commit ou rollback un seul message JMS, votre session doit être traitée pour un seul message JMS.

Transacted Session

donc je suppose, votre commit ou rollback pour un message affecte un autre message ou non ne dépend pas de votre fils, mais la façon dont vous avez défini une transaction et le nombre de messages constituaient une transaction (comment une transaction est délimité).

Son un Sessioncommit et rollback pas Messagecommit ou rollback.

Espérons que ça aide !!