간단히 말해서, 저는 스프링 에서 가져온 간단한 JMS 구성을 사용합니다. 시작 가이드 : https://spring.io/guides/gs/messaging-jms/. TX는 성공적인 경우에만,현재 JMS 상태를 즉시 무시하고 메시지를 보냅니다.
@Service
open class MyService(private val t: JmsTemplate) {
//
@Transactional
open fun go(sth: String) {
val result = // some logic here
t.convertAndSend("NeedsToBeDelivered", result)
// more logic which might fail
}
}
결과를 전달하지 않을 경우 :
내 경우에는 내가 TX 실패하더라도 거래 방법, STH 같은 (코 틀린 코드)에서 JMS 메시지를 전송하고 싶습니다이다 - 로직 섹션이 실패하면 - msg가 손실됩니다. 여러 가지 방법으로 AMQ를 구성하려고했지만 몇 가지 TX 변형을 시도했지만 나에게 적합한 것은 아닙니다.
나는 에 관심이 있습니다. TX 상태를 무시하고 2/즉각 배송 (현재 TX가 완료 될 때까지 연기되지 않았습니다).
제안 사항?
UPDATE
어제 나는이 일을 시도하고 예상대로 작동합니다. 우리가 모든 conn.close() -like 혼란 및 예외 처리를 피하기 이런 식으로 일을 가진 - 게리에 의해 제안
@Transactional(propagation = NOT_SUPPORTED)
fun sendNoTx(msg: String, destination: String) = try {
val con = cf.createConnection() // cf stands for connection factory
con.start()
val session = con.createSession(false, AUTO_ACKNOWLEDGE)
val producer = session.createProducer(session.createQueue(destination))
producer.send(session.createTextMessage(msg))
con.close()
} catch (e: Exception) {
LOG.warn("Failed to send NO TX message", e)
}
더 우아한 해결책은 CF의 또 다른 인스턴스와이 JmsTemplate을 공급하는 것입니다.