0
我必須向2個不同的隊列(隊列1和隊列2)發送消息。但是,我想回滾,如果發送失敗的任何隊列(隊列1或隊列2)。在一個事務中發送多個jms消息
我的源代碼如下所示。任何人都可以通過這方面的一些投入
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;
});
}
嗨加里,我嘗試了javax和基於spring的@Transactional分開。但是,它沒有奏效。我改變了代碼如下。有效。但是,我想知道,我們如何做這個聲明而不是程序回滾。資源 PlatformTransactionManager jmsTransactionManager; TransactionStatus status = jmsTransactionManager.getTransaction(new DefaultTransactionDefinition());在第二個jmsTemplate.send之後,我使用commit。在異常塊中,我使用了回滾。 jmsTransactionManager.commit(status); 或jmsTransactionManager.rollback(status); –
您必須錯誤配置某些內容。聲明式事務應該正常工作。不要試圖在這裏發表評論代碼;幾乎不可讀。改爲編輯問題。仔細閱讀參考手冊。如果您仍然無法弄清楚,請顯示您的所有配置。 –
我能夠通過添加spring的@Transactional來解決問題。缺少的部分是Spring引導應用程序類中的EnableTransactionManagement。謝謝加里 –