同步发送JMS消息

时间:2019-08-13 09:19:42

标签: java jms

假设我有一个非常简单的带有消息生成器的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有效

0 个答案:

没有答案