2013-10-01 2 views
0

Я бег кластера (узел 1 & узел 2) с 2 Применением. Приложение А и приложение Б.Возможно ли связать идентификатор узла с сообщением JMS?

  1. приложение А будет отправлять сообщения JMS очереди Q (Это будет распространять через узел 1 & 2).
  2. приложение Б будет прослушивать из очереди, и процесс Отправить сообщение обратно в Q (Это также будет распространяться).

Так что я хочу, чтобы приложение B отправило сообщение на тот же узел, где он принимает. Как мы можем достичь этого?

код/​​конфигурация. Как ?

Заранее спасибо.

ответ

1

Вы можете установить свойство String, на сообщение в зависимости от того, какой узел вы намерены доставить его.

 TextMessage textmsg1 = qs.createTextMessage(); 
     textmsg1.setStringProperty("SentToNode","Node1"); 

(если он доставляет каждое сообщение в обоих узлах, то вы можете просто сделать AppB отправлять сообщения как узлы, которые не имеет смысла, так игнорируя этот случай).

Теперь на ресивере конца (Ваше приложение B), который слушает эту очередь вы можете получить эту собственность и принять соответствующие меры.

@Override 
public void onMessage(Message message) { 
    try { 
     count++; 
     TextMessage msg = (TextMessage) message; 
     System.out.println("Message Received " + msg.getText()); 
     System.out.println("Message received from " + msg.getStringProperty("SentToNode")); 
     //now you can send the message to that node 

    } catch (JMSException e) { 
     e.printStackTrace(); 
    } 
} 
+0

А также увидеть это сообщение, слушатель-контейнеровозов конфиги: http://stackoverflow.com/questions/12820306/how-to-inject-a-message-selector-to-message-listener-bean- в-JMS-весна-интег – united