2013-04-15 1 views
0

Я пишу программу, использующую среду IDE NetBeans и Java EE с сервером glassfish3. В настоящее время у меня есть 2 потока, A и B. Они оба отправляют сообщения друг другу взад и вперед. Проблема, которую я имею это:Служба сообщений Java - сообщение не получено

1. A sends a message, M1, to B 
2. B receives M1 
3. B sends M2 to A 
4. A hangs waiting on M2 

Вот мой код:

Тема A:

//required declarations 
producer = session.createProducer(AtoBQueue); 
m1 = session.createMapMessage(); 
m1.setString("m1", "m1Val"); 
m1.setJMSReplyTo(BtoAQueue); 
flag = true; 
producer.send(m1); 

consumer = session.createConsumer(BtoAQueue); 
connection.start(); 

if(flag){ 
    m2 = (MapMessage) consumer.receive(); 
    String m2Val = m2.getString("m2"); 
    if(m2Val.equals("true")){ 
     flag2 = true; 
    } 
} 
... 

Тема B:

consumer = session.createConsumer(AtoBQueue); 
connection.start(); 
while(true){ 
    m1 = (MapMessage) consumer.receive(); 
    m1Val = m1.getString("m1"); 
    if(m1Val != null){ 
     flag = true; 
    } 

    MessageProducer producer = session.createProducer((Queue m1.getJMSReplyTo()); 
    m2 = session.createMapMessage(); 
    if(m1Val != null){ 
     if(m1Val.equals("m1Val")){ 
     m2.setString("m2", "m2Val"); 
     m2.setJMSReplyTo(AtoBQueue); 
     producer.send(m2); 
     } 
    } 
    ... 
} 

ответ

0

Оказывается, мне нужно добавить в session.commit() после того, как я делаю producer.send (сообщение) только для резьбы B.

0

Ваш Thread А посылает ключ как «отчет», и вы ожидаете, что в Thread B «m1», следовательно, он не отправит ответ обратно в очередь. Также попробуйте создать «Потребитель» в «А» перед отправкой сообщения.

+0

о возгласы. Я изменил его на m1. Я немного упростил свой код и случайно оставил его там. Это не моя проблема. Проблема, с которой я сталкиваюсь, заключается в том, что A не получает m2 – user972276

 Смежные вопросы

  • Нет связанных вопросов^_^