Transmission de la charge de messages par référence : Scénarios et exemple de code pour des applications émettrices et destinataires
Codez les applications JMS de manière à transmettre en toute sécurité les charges de messages par référence pour la messagerie asynchrone, entre les applications émettrices et destinataires au sein d'un seul serveur.
Lorsque des messages volumineux de type objet ou octet sont envoyés, la quantité de mémoire et le traitement processeur nécessaires pour sérialiser, désérialiser et copier les messages peuvent être importants. i l'application émettrice et l'application destinataire se trouvent sur la même JVM et que vous activez les propriétés transmission de la charge de messages par référence sur les fabriques de connexions et les spécifications d'activation associées, les charges de messages sont envoyées par référence de l'application émettrice vers l'application destinataire. Cette opération permet de limiter ou d'ignorer la copie des données et d'améliorer les performances et l'utilisation de la mémoire.
Dans l'illustration suivante, les messages passent d'une application fournisseur JMS à une file d'attente d'un moteur de messagerie, via une fabrique de connexions de fournisseur. Ils sont ensuite supprimés de la file d'attente et transmis à une application consommatrice JMS via une fabrique de connexions de consommateur ou une spécification d'activation.

DataObject data = new DataObject();
data.setXXX("xxx");
data.setYYY(yyy);
ObjectMessage message = session.createObjectMessage();
message.setObject(data);
data = null;
producer.send(message);
Pour les messages de type octet, l'application émettrice doit également veiller à n'écrire qu'un seul tableau d'octets complet au sein du message.
Pour vous aider à effectuer cette opération, voici un exemple de code que vous pouvez adapter pour l'utiliser dans votre application :byte [] data = myByteData;
BytesMessage message = session.createBytesMessage();
message.writeBytes(data);
data = null;
producer.send(message);
public void onMessage (Message message)
{
ObjectMessage oMessage = (ObjectMessage) message;
DataObject data = oMessage.getObject();
System.out.print(data.getXXX());
System.out.print(data.getYYY());
}