假设我有一个非常简单的带有消息生成器的JMS设置
@Stateless
public class MessageProducer {
@Inject
private JMSContext context;
@Resource(mappedName = "java:global/jms/MyFirstJmsQueue")
private Destination myFirstJmsQueue;
public void sendMessage(String messageToSend) {
this.context.createProducer().send(this.myFirstJmsQueue, messageToSend);
System.out.println("SEND MESSAGE: " + messageToSend);
}
}
还有一个消息使用者:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:global/jms/MyFirstJmsQueue")})
public class MessageConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("RECEIVED MESSAGE: " + message.getBody(String.class));
} catch (final JMSException e) {
e.printStackTrace();
}
}
}
现在一切都很好。成品应与队列异步工作。
但不应该进行测试。为了测试设置是否正常工作,我需要测试以配置这些类以使其同步工作。
或者,这些类可以异步保持,但是测试需要添加一些内容,例如“等待所有消息发送”。
JMS是否可以使用这些选项之一?
注意:
JMSProducer#setAsync
的JavaDoc说“默认情况下,发送的呼叫是同步的”。显然这并不意味着接收消息也是同步的。 JMSContext.createConsumer(this.myFirstJmsQueue).receive()
也不理想,因为我无法测试我的设置,但是如果JMS有效