IBM MQ是广泛应用的消息中间件,如果实际项目中消息中间件只有IBM MQ,那么可以用IBM MQ提供的包来访问。如果想让客户端代码通用,支持所有JMS标准的MQ,就需要以JMS标准方式访问。参考这个帖子,
关键是如何获得连接MQ的java.jms.Connection。对于IBM MQ不能以传入url的方式获得Connection,只能以JNDI查找的方式获得Connection。
public static final String icf = "com.sun.jndi.fscontext.RefFSContextFactory";
static String url = "file:C:/IBM MQ/";
//下面代码通过jndi lookup获得connection
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY, icf);
environment.put(Context.PROVIDER_URL, url);
ctx = new InitialDirContext( environment );
connFactory = (ConnectionFactory)ctx.lookup( cfLookup );
connection = connFactory.createConnection();
connection.start();
//下面就是纯粹JMS的代码了
Session session = connection.createSession(false, Session.ATUO_ACKNOWLEDGE);
Queuq queuq = session.createQueue("queue1");
MessageProducer producer = session.createProducer(queue);
TextMessage outMessage = session.createTextMessage();
outMessage.setText("outString");
myProducer.send(outMessage);
使用JNDI查找方式需要在MQ中做配置。在JMS受管理对象中建立初始上下文,jndi名称空间选择文件系统,类型是com.sun.jndi.fscontext.RefFSContextFactory。
然后在初始上下文中建立连接工厂。注意传输类型,如果选择绑定,意味着MQ与客户端程序在同一机器上,连接时不需要认证;如果选择MQ 客户机。那么连接的时候需要认证。建立连接工厂的最后一步需要制定连接,要选择一个队列管理器,这样通过连接工厂就可以连接到队列管理器了。