59 lines
1.7 KiB
Kotlin
59 lines
1.7 KiB
Kotlin
package util.jms.replier
|
|
|
|
import java.io.Serializable
|
|
import javax.jms.Message
|
|
import javax.jms.Queue
|
|
import javax.jms.QueueConnectionFactory
|
|
import javax.jms.Session
|
|
import javax.jms.ObjectMessage
|
|
import javax.jms.TextMessage
|
|
|
|
abstract class AbstarctReplier(
|
|
queueName: String,
|
|
private val shared: Boolean = false
|
|
) : Replier {
|
|
private val factory: QueueConnectionFactory = this.getFactory()
|
|
private val connection = factory.createQueueConnection()
|
|
private val mainSession = connection.createQueueSession(
|
|
false,
|
|
Session.AUTO_ACKNOWLEDGE
|
|
)
|
|
private val mainQueue = mainSession.createQueue(queueName)
|
|
private val receiver = mainSession.createReceiver(mainQueue)
|
|
private val secondarySession = connection.createQueueSession(
|
|
false,
|
|
Session.AUTO_ACKNOWLEDGE
|
|
)
|
|
|
|
override fun onRequest(buildResponse: (Message) -> Message) {
|
|
receiver.setMessageListener {
|
|
val replyQueue = it.jmsReplyTo as Queue
|
|
val sender = secondarySession.createSender(replyQueue)
|
|
val replyMessage = buildResponse(it)
|
|
|
|
if (shared)
|
|
replyMessage.jmsCorrelationID = it.jmsMessageID
|
|
|
|
sender.send(replyMessage)
|
|
}
|
|
}
|
|
|
|
override fun createTextMessage(text: String): TextMessage = mainSession.createTextMessage(text)
|
|
|
|
override fun createObjectMessage(obj: Serializable?): ObjectMessage =
|
|
mainSession.createObjectMessage(obj)
|
|
|
|
override fun createMessage(): Message = mainSession.createMessage()
|
|
|
|
override fun start() {
|
|
connection.start()
|
|
}
|
|
|
|
override fun close() {
|
|
mainSession.close()
|
|
connection.close()
|
|
}
|
|
|
|
abstract fun getFactory(uri: String = "tcp://localhost:61616"): QueueConnectionFactory
|
|
}
|