2013-04-15 133 views
0

我正在使用NetBeans IDE和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添加()后,我只对线程B.做producer.send(消息)

0

你的线程A发送的关键作为“报告”,并且您期望在线程B中为“m1”,因此它不会将回复发送回队列。也请尝试在发送消息之前在A中创建消费者。

+0

哦哎呦。我将它改为m1。我简化了我的代码,并且意外地将它留在了那里。但这不是我的问题。我遇到的问题是A没有收到m2 – user972276