Je travaille sur un récepteur JMS multithread et un code éditeur. Un message XML est reçu d'une file d'attente, les procédures stockées (70 secondes à exécuter) sont appelées et la réponse est envoyée à la rubrique dans les 90 secondes. Je dois gérer une condition lorsque le courtier est en panne. c'est-à-dire une condition dans laquelle les messages sont reçus de la file d'attente et sont en cours de traitement dans java, pendant ce temps à la fois la file d'attente et le sujet seront en panne. Ensuite, comment gérer ces messages qui ne sont pas dans la file d'attente et ne pas envoyer au sujet, mais sont en mémoire java? Différentes options disponibles:Application JMS multithread
1.Pour utiliser CLIENT_ACKNOWLEDGE 2.Pour séparer le code éditeur du code récepteur. 3.To ont une utilité d'erreur qui prendra des messages du journal et de les traiter et envoyer à la rubrique (moins préféré)
S'il vous plaît me suggérer la bonne option
Je crois que si la session a été traitée, le mode d'accusé de réception (par exemple CLIENT_ACKNOWLEDGE) est ignoré :) –
Oui, je pense avec mon chapeau WMQ. Nous définissons généralement CLIENT_ACKNOWLEDGE dans l'objet géré car il doit être défini sur * quelque chose * et cela indique à quiconque le lit que le code doit être explicitement validé. Cependant, du point de vue du JMS, cela ne fait rien. J'ai modifié cela dans ma réponse. +1 pour la bonne prise. –
Merci beaucoup! si au lieu de connection.createSession (false, javax.jms.Session.CLIENT_ACKNOWLEDGE), j'utiliser connection.createSession (true, javax.jms.Session.CLIENT_ACKNOWLEDGE); alors la session est traitée et le mode d'accusé de réception est ignoré. Après avoir envoyé la réponse à Sujet, je vais commettre() la session. Ma question est que si la session est annulée en cas d'exception (comme le courtier et la réponse ne peut pas être envoyée au sujet) alors ce message existe toujours dans la file d'attente quand le courtier est de retour après 10 minutes alors ce message est toujours en file d'attente? – Jyoti