Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个事务中发送多个jms消息_Jms_Spring Jms_Jmstemplate - Fatal编程技术网

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

在一个事务中发送多个jms消息,jms,spring-jms,jmstemplate,Jms,Spring Jms,Jmstemplate,我必须向两个不同的队列(队列1和队列2)发送消息。但是,如果任何队列(queue1或queue2)的发送失败,我希望回滚 我的源代码如下所示。任何人都可以通过这方面的一些投入 public void sendMessage(final Map<String, String> mapMessage) { jmsTemplate.send(queue1, session -> { MapMessage message = session.createMap

我必须向两个不同的队列(队列1和队列2)发送消息。但是,如果任何队列(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;
    });

    } 
public void sendMessage(最终映射消息){
发送(队列1,会话->{
MapMessage=session.createMapMessage();
迭代器it=mapMessage.entrySet().Iterator();
while(it.hasNext()){
Map.Entry pair=it.next();
message.setStringProperty(pair.getKey(),pair.getValue());
}
message.setjmsrediver(true);
message.setJMSCorrelationID(UUID.randomuid().toString().replaceAll(“-”,”);
返回消息;
});
发送(队列2,会话->{
MapMessage=session.createMapMessage();
迭代器it=mapMessage.entrySet().Iterator();
while(it.hasNext()){
Map.Entry pair=it.next();
message.setStringProperty(pair.getKey(),pair.getValue());
}
message.setjmsrediver(true);
message.setJMSCorrelationID(UUID.randomuid().toString().replaceAll(“-”,”);
返回消息;
});
} 

在输入
sendMessage
方法之前启动一个事务,例如使用
@Transactional
-请参阅。

嗨,Gary,我分别尝试了javax和基于spring的@Transactional。但是,它没有起作用。我改变了代码如下。成功了。然而,我想知道,我们如何做这个声明性的而不是程序性的回滚。资源平台事务管理器jmsTransactionManager;TransactionStatus status=jmtransactionManager.getTransaction(新的DefaultTransactionDefinition());在第二个jmsTemplate.send之后,我使用commit。在异常块中,我使用了回滚。jmtransactionmanager.commit(状态);或jmtransactionmanager.rollback(状态);你一定是弄错了什么。声明性事务应该可以正常工作。不要试图在这里的注释中添加代码;几乎不可读。改为编辑问题。仔细阅读参考手册。如果您仍然无法理解,请显示所有配置。我可以通过添加@Transactional of spring来解决此问题。缺少的部分是spring boot应用程序类上的EnableTransactionManagement。谢谢你,加里