Comment faire une requête JMS Synchrone
J'ai une webapp qui est prévu pour récupérer et afficher les données à partir d'une Application Externe qui n'est accessible que via la messagerie (JMS).
Donc, si un utilisateur envoie une demande sur un navigateur, la même requête HTTP thread aura à interagir avec le système de Messagerie (MQ Series) de telle sorte que la même demande thread peut afficher les données reçues du Système de Messagerie.
Est-il un modèle que je peux utiliser ici? J'ai vu quelques vagues références sur le net qui utilisent des "ID de Corrélation" de cette façon:
Msg m = new TextMsg("findDataXYZ");
String cr_id = m.setCorrelationID(id);
sendQueue.send(m).
//now start listening to the Queue for a msg that bears that specific cr_id
Response r = receiverQueue.receive(cr_id);
Est-il quelque chose de mieux là-bas? Les autres modèles que j'ai trouvé attendre la réponse pour être reçu de manière asynchrone.. ce qui n'est pas une option pour moi, depuis que j'ai envoyer la réponse sur la même requête HTTP.
source d'informationauteur rk2010
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ouvrez la file d'attente de réponse. Puis passer que l'objet de l'ensemble de réponse de la méthode sur le message. De cette façon, le service de répondre à votre demande sache où envoyer la réponse. Généralement, le service de copier l'ID du message à l'ID de corrélation de champ lorsque vous envoyez le message, le message d'ID que vous obtenez en retour et l'utilisation que pour écouter la réponse de la file d'attente. Bien sûr, si vous utilisez une dynamique de réponse de la file d'attente ce n'est même pas neessary - il suffit d'écouter le message suivant dans la file d'attente.
Il y a un exemple de code qui illustre tout cela. Si vous avez installé à l'emplacement par défaut, le code d'exemple de vie à
"C:\Program Files (x86)\IBM\WebSphere MQ\tools\jms\samples\simple\SimpleRequestor.java"
sur une zone de Windows ou/var/mqm/toolsjms/samples/simple/SimpleRequestor.java
sur un *nix boîte.Et sur le hasard, vous êtes vous demandez-vous à "installer quoi, exactement?" le WMQ d'installation du client est téléchargeable gratuitement SupportPac MQC71.
La demande/réponse modèle de messagerie est utile pour votre condition. Vous utilisez généralement un CorrelationId de relier la demande & les messages de réponse.
Lors de l'envoi du message de demande vous définissez JMSReplyTo de destination du message. Généralement, une file d'attente temporaire est utilisé comme JMSReplyTo de destination. Lors de la création d'un consommateur de recevoir la réponse d'utiliser un sélecteur avec JMSCorrelationId, quelque chose comme
cons = session.createConsumer(tempDestination,"JMSCorrelationId="+requestMsg.JMSMessageId);
À l'autre extrémité, l'application qui est le traitement le message de demande doit utiliser le JMSReplyTo de destination pour envoyer la réponse. Il doit également utiliser le MessageId de la demande de message et de le définir comme CorrelationId du message de la réponse.