You need to add the necessary dependencies and configure a different connectionFactory.
Here’s our resources.groovy from a project that is using both ActiveMQ and IBM MQ:
import com.ibm.mq.jms.JMSC
import com.ibm.mq.jms.MQQueueConnectionFactory
import org.apache.activemq.ActiveMQConnectionFactory
import org.apache.activemq.RedeliveryPolicy
import org.springframework.jms.connection.SingleConnectionFactory
import org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter
import org.springframework.jms.core.JmsTemplate
import org.springframework.jms.listener.DefaultMessageListenerContainer
// Place your Spring DSL code here
beans = {
// IBM MQ
ibmMQJmsConnectionFactory(UserCredentialsConnectionFactoryAdapter) { bean ->
bean.primary = true
targetConnectionFactory = { MQQueueConnectionFactory cf ->
hostName = grailsApplication.config.ibmMQ.hostName
port = 1414
channel = "SYSTEM.DEF.SVRCONN"
transportType = JMSC.MQJMS_TP_CLIENT_MQ_TCPIP
queueManager = grailsApplication.config.ibmMQ.queueManager
}
username = grailsApplication.config.ibmMQ.username
password = grailsApplication.config.ibmMQ.password
// Redelivery must be configured in IBM WebSphere MQ Explorer ("Backout requeue queue" and "Backout threshold")
}
ibmMQJmsTemplate(JmsTemplate) {
connectionFactory = ref(ibmMQJmsConnectionFactory)
receiveTimeout = 2000
sessionTransacted = true
sessionAcknowledgeMode = 0
}
ibmMQListenerContainer(DefaultMessageListenerContainer) {
connectionFactory = ref(ibmMQJmsConnectionFactory)
sessionTransacted = true
destinationName = ""
}
// ActiveMQ
activeMQJmsConnectionFactory(SingleConnectionFactory) {
targetConnectionFactory = { ActiveMQConnectionFactory cf ->
brokerURL = grailsApplication.config.activeMQ.brokerURL
def policy = new RedeliveryPolicy()
policy.initialRedeliveryDelay = 1000
policy.maximumRedeliveries = 5
redeliveryPolicy = policy
//nonBlockingRedelivery = true
}
}
activeMQJmsTemplate(JmsTemplate) {
connectionFactory = ref(activeMQJmsConnectionFactory)
receiveTimeout = 2000
sessionTransacted = true
sessionAcknowledgeMode = 0
}
activeMQListenerContainer(DefaultMessageListenerContainer) {
connectionFactory = ref(activeMQJmsConnectionFactory)
sessionTransacted = true
destinationName = ""
}
}
application.groovy:
jms {
containers {
ibmMQ {
meta {
parentBean = 'ibmMQListenerContainer'
}
connectionFactoryBean = "ibmMQJmsConnectionFactory"
}
activeMQ {
meta {
parentBean = 'activeMQListenerContainer'
}
connectionFactoryBean = "activeMQJmsConnectionFactory"
}
}
adapters {
ibmMQ {
meta {
parentBean = 'standardJmsListenerAdapter'
}
}
activeMQ {
meta {
parentBean = 'standardJmsListenerAdapter'
}
}
}
templates {
ibmMQ {
meta {
parentBean = "ibmMQJmsTemplate"
}
}
activeMQ {
meta {
parentBean = "activeMQJmsTemplate"
}
}
}
}