你好,我正在编写一些简单的测试场景,其中我执行以下源代码:
这是我的send()方法:
public void send() throws JMSException {
Session session = null;
MessageProducer producer = null;
try {
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST.FOO");
producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
byte[] uselessData = new byte[1024];
BytesMessage message = session.createBytesMessage();
message.writeBytes(uselessData);
producer.send(message);
} finally {
producer.close();
session.close();
}
}
这是我的receive()方法:
public void receive() throws JMSException {
Session session = null;
MessageConsumer consumer = null;
try {
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST.FOO");
consumer = session.createConsumer(destination);
Message hugeMessage = consumer.receiveNoWait();
if (hugeMessage == null) {
System.out.println("Message was not received");
unsucsesfullCount++;
} else {
if (hugeMessage instanceof BytesMessage) {
System.out.println("Message received");
}
}
} finally {
consumer.close();
session.close();
}
}
我执行:
send();
receive();
receiveNoWait() 方法返回的消息值始终为null。我的问题是,当代理中存在消息时,receiveNoWait() 是否保证消息传递?send() 成功执行,因此目标至少有一条消息。
我在规范中搜索过,但并没有明确说明在客户端必须通过 receiveNoWait() 明确接收代理端可用的消息。
另外,我想问的是,如果 receiveNoWait() 没有可用的消息,它是否应该触发代理中的某些刷新消费者进程,以便下一个 receiveNoWait() 将接收到消息?
我提供的示例代码在 ActiveMQ 上运行,但我的问题更多地涉及概念而非特定提供程序,因为我对其他 JMS 提供程序也有同样的观察。