This code works to subscribe to an IBM MQ Topic called TESTTOPIC set up with MQExplorer 7.5.0.1 using the defaults. Code uses uses Spring SimpleMessageListenerContainer
Keywords: JMS DefaultMessageListenerContainer SimpleMessageListenerContainer MQTopicConnectionFactory MQQueueConnectionFactory
package poc;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.junit.Test;
import org.springframework.jms.listener.AbstractMessageListenerContainer;
import org.springframework.jms.listener.SimpleMessageListenerContainer;
import com.ibm.mq.jms.MQTopicConnectionFactory;
public class PubSub2Test {
@Test
public void test() throws InterruptedException, JMSException {
MQTopicConnectionFactory connectionFactory = new MQTopicConnectionFactory(); // MQQueueConnectionFactory does not work here
connectionFactory.setHostName("localhost");
connectionFactory.setPort(1414);
connectionFactory.setQueueManager("AAA.QMGR");
connectionFactory.setChannel("AAA.SVRCONN");
connectionFactory.setTransportType(1);
AbstractMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer(); // a DefaultMessageListenerContainer does not work here
listenerContainer.setPubSubDomain(true);
listenerContainer.setConnectionFactory(connectionFactory);
listenerContainer.setDestinationName("TESTTOPIC");
MessageListener listener = new MessageListener() {
@Override
public void onMessage(Message arg0) {
System.out.println("\nMessage received: " + arg0.toString() + "\n");
}
};
listenerContainer.setMessageListener(listener);
listenerContainer.start();
while (true) {
Thread.sleep(3000);
System.out.print(".");
}
}
}