在一个事务中发送多个jms消息

时间:2017-06-14 04:02:23

标签: jms spring-jms jmstemplate

我必须向2个不同的队列(queue1和queue2)发送消息。但是,如果任何队列(queue1或queue2)的发送失败,我想回滚。

我的源代码如下所示。任何人都可以通过一些投入。

  public void sendMessage(final Map<String, String> mapMessage) {

    jmsTemplate.send(queue1, session -> {
      MapMessage message = session.createMapMessage();
      Iterator<Entry<String, String>> it = mapMessage.entrySet().iterator();
      while (it.hasNext()) {
        Map.Entry<String, String> pair = it.next();
        message.setStringProperty(pair.getKey(), pair.getValue());
      }
      message.setJMSRedelivered(true);
      message.setJMSCorrelationID(UUID.randomUUID().toString().replaceAll("-", ""));
      return message;
    });

    jmsTemplate.send(queue2, session -> {
      MapMessage message = session.createMapMessage();
      Iterator<Entry<String, String>> it = mapMessage.entrySet().iterator();
      while (it.hasNext()) {
        Map.Entry<String, String> pair = it.next();
        message.setStringProperty(pair.getKey(), pair.getValue());
      }
      message.setJMSRedelivered(true);
      message.setJMSCorrelationID(UUID.randomUUID().toString().replaceAll("-", ""));
      return message;
    });

    } 

1 个答案:

答案 0 :(得分:2)

在输入sendMessage方法之前启动交易,例如使用@Transactional - 请参阅Spring Framework Reference Manual