IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Utilisation d'un topic persistant avec Client Acknowledge mais disparition du message [Integration]


Sujet :

Spring Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut Utilisation d'un topic persistant avec Client Acknowledge mais disparition du message
    Bonjour,

    J'utilise Spring JMS pour me connecter à un Topic persistent (en utilisant un Client Id unique et une connectivité persistente), jusque là pas de problème.

    J'ai positionné le mode d'acquittement en mode CLIENT afin de faire disparaître le message du topic lorsque mon traitement métier est terminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	<jms:listener-container acknowledge="client" connection-factory="connectionFactory" destination-type="durableTopic" client-id="prdevent">
    		<jms:listener destination="${jms.topic.operations}" ref="topicSubscriberOnOperation"/>
    	</jms:listener-container>
     
     
    	<!-- Subscribers -->
    	<bean id="topicSubscriberOnOperation" class="com.test.jms.mdb.TopicOperationEventSubscriber">
    		<property name="threadPoolSize" value="10"></property>
    	</bean>


    Ma problématique est la suivante :
    Lorsque je reçois un message depuis mon listener que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    public class TopicOperationEventSubscriber implements MessageListener
    ...
     
    	@Override
    	public void onMessage(Message arg0) 
    	{
    		try
    		{
    			if (arg0 != null && arg0 instanceof TextMessage)
    			{
    				// Declare a callable
    				OperationServiceRouterCallable callable = new OperationServiceRouterCallable ((TextMessage)arg0);
     
    				// Start it in a asynchronous way
    				executorservice.submit(callable);
    			}
    			else
    			{
    				log.warn("Object received null or not instance of javax.jms.TextMessage : "+arg0==null?"null":arg0);
    			}
    		}
    		catch (Exception e)
    		{
    			log.error(e);
    		}
    	}
    Un acquittement n'est pas envoyé au serveur JMS et si j'arrête mon application et que je la relance, le message JMS est à nouveau consommé.

    Par contre, dès lors que je passe par mon Callable en mettant un point d'arrêt au tout début du Callable (cad que le Callable n'a strictement rien fait, il est juste au début de son point d'entrée call ()) et que j'arrête mon application ; mon message JMS n'est plus consommé par mon listener ; comme si le fait d'avoir utilisé le Message JMS par un autre thread avait envoyé un acknowledge () au serveur JMS.

    Auriez-vous déjà rencontré ce genre de problème : acquittement en mode CLIENT_ACKNOWLEDGE et multithread qui fait en sorte que des messages ne puissent plus être récupérés au redémarrage d'un process ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Après test, il s'avère que la norme est qu'un acknowledge est envoyé au serveur pour acquitter le message à la fin de la méthode onMessage(), indépendamment du type d'acquittement choisi (DUPS, CLIENT, AUTO).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/07/2015, 09h12
  2. Connection Client/Server, et disparition du message transmis
    Par metalcoyote dans le forum Général Java
    Réponses: 3
    Dernier message: 13/11/2009, 12h30
  3. Utiliser la persistance avec Workflow Foundation
    Par Louis-Guillaume Morand dans le forum Windows Workflow Foundation
    Réponses: 2
    Dernier message: 30/06/2009, 08h18
  4. Utiliser Java pour la persistence d'objets avec MySQL
    Par wallys dans le forum Persistance des données
    Réponses: 4
    Dernier message: 07/07/2008, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo