【问题标题】:Java Messaging Service - message not getting receivedJava 消息服务 - 未收到消息
【发布时间】:2013-04-16 07:40:19
【问题描述】:

我正在使用带有 glassfish3 服务器的 NetBeans IDE 和 Java EE 编写程序。目前我有 2 个线程,A 和 B。它们都在彼此之间来回发送消息。我遇到的问题是这样的:

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);
      }
   }
   ...
}

【问题讨论】:

    标签: jakarta-ee netbeans jms glassfish-3


    【解决方案1】:

    您的线程 A 将密钥作为“报告”发送,而您希望线程 B 中的密钥为“m1”,因此它不会将回复发送回队列。在发送消息之前,请尝试在 A 中创建消费者。

    【讨论】:

    • 哦,哎呀。我把它改成了m1。我稍微简化了我的代码,不小心把它留在了那里。不过那不是我的问题。我遇到的问题是 A 没有收到 m2
    【解决方案2】:

    原来我需要在只为线程 B 执行 producer.send(message) 之后添加 session.commit()。

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多