在一个事务中发送多个jms消息
我必须向两个不同的队列(队列1和队列2)发送消息。但是,如果任何队列(queue1或queue2)的发送失败,我希望回滚 我的源代码如下所示。任何人都可以通过这方面的一些投入在一个事务中发送多个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
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。谢谢你,加里