Hallo.
Ich habe einen Client und einen Server. Der Server empfängt 5 Nachrichten und soll jeweils an die Temporary Queue eine Antwort senden.
Ich benutze den Glassfish Application Server und starte beide Klassen mit appclient.
Der Client sendet die erste Nachricht und bekommt auch eine Antwort vom Server, die zweite Nachricht empängt der Sever zwar noch, gibt aber keine Antwort mehr und hängt.
Ich vermute, es passt etwas mit JMSCorrelationID oder JMSMessageID nicht und der Server schickt zwar eine zweite Nachricht, diese wird aber anscheinend auf Client Seite nicht korrekt empfangen / ist nicht zuordbar ?!?
Kann mir jemand weiterhelfen?
Danke.
Hier der Code:
Ich habe einen Client und einen Server. Der Server empfängt 5 Nachrichten und soll jeweils an die Temporary Queue eine Antwort senden.
Ich benutze den Glassfish Application Server und starte beide Klassen mit appclient.
Der Client sendet die erste Nachricht und bekommt auch eine Antwort vom Server, die zweite Nachricht empängt der Sever zwar noch, gibt aber keine Antwort mehr und hängt.
Ich vermute, es passt etwas mit JMSCorrelationID oder JMSMessageID nicht und der Server schickt zwar eine zweite Nachricht, diese wird aber anscheinend auf Client Seite nicht korrekt empfangen / ist nicht zuordbar ?!?
Kann mir jemand weiterhelfen?
Danke.
Hier der Code:
Code:
public ServerSetup() {
logger = Logger.getLogger("ClientSetup");
logger.setLevel(Level.INFO);
try {
context = new InitialContext();
connectionFactory = (ConnectionFactory) context.lookup("jms/ConnFact");
connection = connectionFactory.createConnection();
queue = (Queue) context.lookup("jms/Queue");
// topic = (Topic) context.lookup("jms/Topic");
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
connection.start();
logger.info("start consuming text messages");
while (true) {
TextMessage textMessage = (TextMessage) consumer.receive();
if (textMessage.getText().equals("dummy")) {
break;
}
logger.info(textMessage.getJMSMessageID() + ": " + textMessage.getText());
Queue replyQueue = (Queue) textMessage.getJMSReplyTo();
MessageProducer replyProducer = session.createProducer(replyQueue);
TextMessage replyMessage = session.createTextMessage();
replyMessage.setText("ANSWER - Message " + textMessage.getJMSMessageID() + " arrived");
replyMessage.setJMSCorrelationID(textMessage.getJMSMessageID());
replyProducer.send(replyMessage);
}
logger.info("text messages received");
session.close();
connection.close();
}
catch (NamingException e) {
e.printStackTrace();
}
catch (JMSException e) {
e.printStackTrace();
}
}
}
Code:
public ClientSetup() {
System.out.println("test");
logger = Logger.getLogger("ServerSetup");
logger.setLevel(Level.INFO);
try {
context = new InitialContext();
connectionFactory = (ConnectionFactory) context.lookup("jms/ConnFact");
connection = connectionFactory.createConnection();
queue = (Queue) context.lookup("jms/Queue");
// topic = (Topic) context.lookup("jms/Topic");
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
TemporaryQueue temporaryQueue = session.createTemporaryQueue();
connection.start();
for (int i=0; i<5; i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("jms queue test " + i);
textMessage.setJMSReplyTo(temporaryQueue);
MessageConsumer consumer = session.createConsumer(temporaryQueue);
producer.send(textMessage);
logger.info("message " + textMessage.getJMSMessageID() + " sent: \n" + textMessage.getText() );
TextMessage confirmation = (TextMessage) consumer.receive();
logger.info("Confirmation: " + confirmation.getText());
}
// leere Message zum Abschluss
TextMessage dummy = session.createTextMessage();
dummy.setText("dummy");
producer.send(dummy);
logger.info("text messages sent");
session.close();
connection.close();
}
catch (NamingException e) {
e.printStackTrace();
}
catch (JMSException e) {
e.printStackTrace();
}
}
}