2017-11-14 5 views
0

Ich entwickle einen Spring JMS-basierten Client, der eine Verbindung zu einem IBM MQ herstellt.Spring JMS: Konfigurieren von Multi-Consumer-Client

Dieser Teil funktioniert gut !!

Szenario:

Der MQ-Client eine Anfrage von mehreren Spring "@Components" bekommen kann. In Anbetracht JMSTemplate der „Senden“ und „Empfangen“ ganz andere Methoden sind -

Frage:

Wie wir zusammen beziehen sich die Antwort von bauteil man nur seine Anfrage? z.B.

A sendet Anfrage-A

B Anfrage-B

Wie wird SpringListener wissen sendet die Antwort-A auf A zu reagieren und Antwort-B nach B?

Bietet der Frühling eine Out-of-Box-Funktionalität für ein solches Szenario?

Vielen Dank im Voraus!

Beispiel Zuhörer:

public class MessageReceiver implements MessageListener { 

    @Override 
    public void onMessage(Message message) { 

     if(message instanceof TextMessage){ 
      System.out.println(message.toString()); 
     } 
    } 
} 

Probe Sender:

public class App 
{ 
    public static void main(String[] args) 
    { 

     ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 
     JmsTemplate jmsTemplate = (JmsTemplate)context.getBean("jmsTemplate"); 

     jmsTemplate.send(s -> s.createTextMessage("TestingAMQ")); 
    } 
} 

Antwort

1

basierend auf dem JMSReplyTo Header Sie es mit JmsTemplate.sendAndReceive für den Absender tun

und in der Zuhörerseite nach

public class MessageReceiver implements MessageListener { 

     @Override 
     public void onMessage(Message message) { 
      jmsTemplate.send(message.getJMSReplyTo(), s -> s.createTextMessage("TestingAMQ")); 
      if(message instanceof TextMessage){ 
       System.out.println(message.toString()); 
      } 
     } 
    } 

OR

durch eine Nachricht Eigenschaft in der Senderseite durch Message.setStringProperty und Selektoren Verwendung in dem Hörer oder eine bedingte Reaktion auf das String basierend Einstellung.

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/core/JmsTemplate.html#sendAndReceive-org.springframework.jms.core.MessageCreator-

+0

Die Methode "SendAndReceive" erstellt eine temporäre Queue (pro der jmsTemplate Dokumentation) zu reagieren. "Message.setStringProperty" scheint eine gute Idee zu sein ... aber müsste die Methode nicht synchronisiert werden? Wenn die Methode nicht synchronisiert wird, kann ein neuer Thread den Wert 'property' in der Methode ändern. – Deep

+0

Eine andere Möglichkeit könnte sein, - senden + empfangen transaktional. Obwohl ich nicht sicher bin, wie dies umgesetzt werden könnte. – Deep

+0

Senden Sie eine Nachricht und empfangen Sie die Antwort vom angegebenen Ziel (gemäß der jmsTemplate-Dokumentation), da Sie sie als Parameter an die sendAndReceive-Methode übergeben. Das Ziel kann einen beliebigen Typ haben und vor –

Verwandte Themen