Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

18.10.2. Utiliser la détection des messages en double pour l'envoi des messages

Pour activer la détection des messages en double des messages envoyés, vous devrez définir une propriété spéciale sur le message à une valeur unique. Vous pourrez créer la valeur comme vous le souhaitez, mais cette valeur doit être unique.
Lorsque le serveur cible reçoit ce message, il vérifie si la propriété spéciale est définie. Si la propriété est définie, alors le serveur cible vérifiera son cache de mémoire pour vérifier la présence d'un message reçu avec cette valeur d'en-tête. Si le serveur détecte un message de cette valeur d'en-tête, il ignorera le message envoyé par un client.
Si vous envoyez des messages dans une transaction, alors vous n'aurez pas à définir la propriété pour chaque message que vous envoyez dans cette transaction. Il suffira de le mettre une fois pour toute dans la transaction. Si le serveur détecte un message dupliqué pour chaque message de la transaction, il ignorera l'ensemble de la transaction.
Le nom de la propriété que vous avez définie est donné par la valeur du org.hornetq.api.core.HDR_DUPLICATE_DETECTION_ID, qui est _HQ_DUPL_ID. La valeur de cette propriété peut être de type byte[] ou SimpleString pour l'API core. Pour les clients JMS (Java Messaging Service), il doit être de type String avec une valeur unique. Une simple façon de créer un id unique consiste à créer un UUID.
L'exemple suivant vous montre comment définir la propriété pour l'API core :
...     

ClientMessage message = session.createMessage(true);

SimpleString myUniqueID = "This is my unique id";   // Can use a UUID for this

message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);

...
L'exemple suivant vous montre comment définir la propriété pour les clients JMS :
...     

Message jmsMessage = session.createMessage();

String myUniqueID = "This is my unique id";   // Could use a UUID for this

message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);

...