【发布时间】:2014-06-26 03:56:07
【问题描述】:
以下代码 sn-p(独立 Java 应用程序)永远不会在队列中找到任何消息,而使用消息侦听器实现同一客户端时(使用 Glassfish 3.1):
ctx = new InitialContext();
connectionFactory = (ConnectionFactory) ctx.lookup("foo.Factory");
partsQueue = (Queue) ctx.lookup("foo.PartsQueue");
conn = connectionFactory.createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
consumer = session.createConsumer(partsQueue);
conn.start();
Message msg = null;
int cnt = -1;
do {
cnt++;
msg = consumer.receiveNoWait();
} while (msg != null);
System.out.println("cnt: " + cnt);
如果我在创建消费者后使用以下代码,监听器会找到消息并成功消费:
listener = new AssemblerListener(this);
consumer.setMessageListener(listener);
System.out.println("waiting for msgs...");
conn.start();
如前所述,独立的 Java 客户端,我并不想在 MDB 中同步做某事。有任何想法吗?没有找到任何提示为什么同步读取在这里不起作用。在这种情况下,使用消息侦听器不是最佳选择,因为有时我必须使用不同的过滤器读取两条消息。
【问题讨论】:
-
所以第一个代码永远不会停止? (while 循环)
-
它会立即停止并输出 0。
-
所以你从
receiveNoWait得到的东西不是你想要的吗? -
我只从 receiveNoWait() 返回了 null (就像队列中没有消息一样)。使用侦听器时,我会收到所有消息。
标签: java glassfish jms synchronous