参考:https://blog.youkuaiyun.com/MePlusPlus/article/details/52847580
启动命令:
### 启动命令(设置临时环境变量,指定libmqjbnd.so或libmqjbnd.dll的位置)
[Linux][HP-UX][Solaris]:
export LD_LIBRARY_PATH=/opt/IBM/mqm/java/lib64:$LD_LIBRARY_PATH && java -jar test1.jar
[Windows-CMD]:
set PATH=C:\Program Files\IBM\MQ\java\lib64;%PATH% && java -jar test1.jar
[Windows-Powershell]:
set PATH=C:\Program Files\IBM\MQ\java\lib64;%PATH% -and java -jar test1.jar
[AIX]
export LIBPATH=/usr/IBM/mqm/java/lib64:$LIBPATH && java -jar test1.jar
# 假如报错 2035,是用户权限问题,linux下切换到有权限的用户去运行,windows需要在mqm用户组下配置用户和密码。
package com.mq.test;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.constants.CMQC;
public class MQTest2 {
private static String mqQMName = "DCNL005CST"; // MQ队列管理器名
private static String mqQueue1Name = "CN_CUST.CN_HUB.CN_CUST.INSTR_RSP.D1"; // MQ队列名,发消息给MQ的
private static String mqQueue2Name = "CN_CUST.CN_HUB.CN_CUST.INSTR_RQST.D1"; // MQ队列名,接收MQ消息的
public static void main(String[] args) throws MQException, IOException {
// 打包成jar后的 启动命令: java -jar xxx.jar [MQ队列管理器名称] [MQ接收队列名1] [MQ发送队列名2]
output("控制台参数:");
for (String s1 : args) {
output(s1 + " ");
}
if (args.length > 0) {
if (args[0].startsWith("DCNL")) {
mqQMName = args[0];
output("指定队列管理器: " + mqQMName);
}
if (args.length > 1 && args[1].startsWith("CN_CUST.")) {
mqQueue1Name = args[1];
output("指定MQ的接收队列: " + mqQueue1Name);
} else {
output("默认的MQ接收队列: " + mqQueue1Name);
}
if (args.length > 2 && args[2].startsWith("CN_CUST.")) {
mqQueue2Name = args[2];
output("指定MQ的发送队列: " + mqQueue2Name);
} else {
output("默认的MQ发送队列: " + mqQueue2Name);
}
} else {
output("默认的队列管理器: " + mqQMName);
output("默认的MQ接收队列: " + mqQueue1Name);
output("默认的MQ发送队列: " + mqQueue2Name);
}
// 发送消息给队列
put();
// 从队列读取消息
// get(); // 接收MQ消息的函数 暂未作修改测试
}
@SuppressWarnings("unchecked")
static void put() {
MQQueueManager queueManager = null;
MQQueue putQueue = null;
try {
// 设置应用名称,方便服务器MQ 查看应用连接
MQEnvironment.properties.put(CMQC.APPNAME_PROPERTY, "HSBC-Swift-API");
// 设置绑定模式通信
MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY, CMQC.TRANSPORT_MQSERIES_BINDINGS);
// 创建实例,连接队列管理器
output("开始连接MQ...");
queueManager = new MQQueueManager(mqQMName);
output("连接MQ成功!");
// 以可写的方式访问队列管理器已定义的队列QUEUE1,当然也可以创建队列
putQueue = queueManager.accessQueue(mqQueue1Name, CMQC.MQOO_OUTPUT);
// 新建并发送消息给队列
MQMessage myMessage = new MQMessage();
String name = "这是发给MQ队列的内容";
output("发送消息:" + name);
myMessage.writeUTF(name);
// 使用默认的消息选项
MQPutMessageOptions pmo = new MQPutMessageOptions();
// 发送消息
putQueue.put(myMessage, pmo);
output("发送成功!");
// 断开连接
putQueue.close();
queueManager.disconnect();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != putQueue) {
try {
putQueue.close();
} catch (MQException e) {
e.printStackTrace();
}
}
if (null != queueManager) {
try {
queueManager.disconnect();
queueManager.close();
} catch (MQException e) {
e.printStackTrace();
}
}
}
}
@SuppressWarnings("unchecked")
static void get() throws MQException, IOException {
// 设置应用名称,方便服务器MQ 查看应用连接
MQEnvironment.properties.put(CMQC.APPNAME_PROPERTY, "MQ Test By Java");
MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY, CMQC.TRANSPORT_MQSERIES_BINDINGS);
// 创建实例,连接队列管理器
MQQueueManager queueManager = new MQQueueManager(mqQMName);
// 以可读的方式访问队列管理器已定义的队列QUEUE1
MQQueue getQueue = queueManager.accessQueue(mqQueue2Name, CMQC.MQOO_INPUT_AS_Q_DEF);
// 从队列读取消息
MQMessage theMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
getQueue.get(theMessage, gmo);
String name = theMessage.readUTF();
output("获取到MQ消息:" + name);
getQueue.close();
// 断开连接
queueManager.disconnect();
}
private static void output(String msg) {
String timeNow = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss").format(new Date());
System.out.println("[" + timeNow + "] " + msg);
}
}