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:
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:
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