0
2つの異なるキュー(queue1とqueue2)にメッセージを送信する必要があります。しかし、キュー(キュー1またはキュー2)のいずれかで送信が失敗した場合は、ロールバックします。1つのトランザクションで複数の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と春の@Transactional別々に基づいて試してみました。しかし、それは働かなかった。コードを以下のように変更しました。出来た。しかし、私は、プログラムのロールバックではなく、この宣言をどのようにすることができるのだろうかと思います。リソース PlatformTransactionManager jmsTransactionManager; TransactionStatus status = jmsTransactionManager.getTransaction(new DefaultTransactionDefinition()); 2番目のjmsTemplate.sendの後に、私はコミットを使用します。例外ブロックでは、私はロールバックを使用しました。 jmsTransactionManager.commit(status); またはjmsTransactionManager.rollback(status); –
何かが誤って構成されている必要があります。宣言的なトランザクションは正常に動作するはずです。コメントにコードを入れないでください。事実上判読できない。代わりに質問を編集します。リファレンスマニュアルをよくお読みください。あなたがまだそれを理解できない場合は、すべての設定を表示してください。 –
@Transactional of springを追加することで問題を解決できます。欠落していた部分は、SpringブートアプリケーションクラスのEnableTransactionManagementでした。おかげでゲイリー –