1. 安装IBM MQ的服务端,参考https://blog.csdn.net/qq_34010941/article/details/119995202
以下我安装的
队列管理器的名称:mq
mq配置的监听端口:1414
本地队列名字:MQ_send
字符集:1381
属于 mq组 的本地用户账号:bai
属于 mq组 的本地用户密码:bai
在上述链接中,需注意的是:第一步安装,第二步创建队列,第三步配置系统用户和用户组(以上都是在服务端的操作)
2. 安装WMQTool工具,测试是否连接
下载地址:https://www.niratul.com/wmqtool002.htm
参考https://blog.csdn.net/flydragon0815/article/details/45199027
3. java代码测试
package com.xj.platform.controller;
import com.ibm.mq.*;
import java.util.*;
public class TestIBMMQ {
// 队列管理器
public static MQQueueManager qMgr;
//字符集
public static String CCSIDs="1381";
// 本地接口
public static String hostnames="192.168.1.133";
// 本地服务器连接通道
public static String channels="MQ_CHL";
// mq配置的监听端口
public static String ports="1414";
// 属于 mq组 的本地用户账号
public static String userIDs="bai";
// 属于 mq组 的本地用户密码
public static String passwords="bai";
// 本地队列名字
public static String queuenames="MQ_send";
public static String queueARGs="49";
// 消息格式
public static String formats="MQC.MQFMT_STRING";
// 队列管理器的名称
public static String queueManagerName="mq";
/**
* 创建连接通道
* @return
*/
public static Map<String, Object> pushWarehouseOrderToGongfu() {
// 要发的消息内容
StringBuilder xmlBuilder = new StringBuilder();
xmlBuilder.append("aa");
// 本地接口
MQEnvironment.hostname = hostnames;
// 本地服务器连接通道
MQEnvironment.channel = channels;
// 监听器的段端口
MQEnvironment.port =Integer.parseInt(ports);
// 字符集
MQEnvironment.CCSID =Integer.parseInt(CCSIDs);
// MQ中拥有权限的用户名
MQEnvironment.userID = userIDs;
// 用户名对应的密码
MQEnvironment.password = passwords;
try {
qMgr = new MQQueueManager(queueManagerName);
} catch (Exception e) {
e.printStackTrace();
}
// 发消息
sendMsg(xmlBuilder);
// 收消息
receiveMsg();
return null;
}
/**
* 发送消息
* @param msgStr
*/
public static void sendMsg(Object msgStr) {
MQQueue queue = null;
try {
// NT_FG 本地队列 49 给本地队列 发消息 这一句是从队列管理器中获取本地队列 ---------- NT_FG_YC远程 16
queue = qMgr.accessQueue(queuenames, Integer.parseInt(queueARGs), null, null, null);
// 当队列深度为零时 会报错 2038
try {
System.out.println("发送消息前的深度为:" + queue.getCurrentDepth());
} catch (Exception e){
e.printStackTrace();
}
MQMessage msg = new MQMessage();// 要写入队列的消息
msg.format = formats;
msg.characterSet = Integer.parseInt(CCSIDs);
msg.encoding = Integer.parseInt(CCSIDs);
// 将数据放入消息缓冲区
msg.writeString(msgStr.toString());
MQPutMessageOptions pmo = new MQPutMessageOptions();
// 设置消息用不过期
msg.expiry = -1;
// 将消息放入队列
queue.put(msg, pmo);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (queue != null) {
try {
queue.close();
} catch (MQException e) {
e.printStackTrace();
}
}
}
}
/**
* 获取消息
*/
public static void receiveMsg() {
MQQueue queue = null;
try {
// 获取本地消息队列
queue = qMgr.accessQueue(queuenames, Integer.parseInt(queueARGs), null, null, null);
try{
System.out.println("===========================");
System.out.println("发送消息前的深度为:" + queue.getCurrentDepth());
}catch (Exception e){
e.printStackTrace();
}
int depth = queue.getCurrentDepth();
// 将队列的里的消息读出来
while (depth-- > 0) {
// 要读的队列的消息
MQMessage msg = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
queue.get(msg, gmo);
System.out.println("消息的大小为(字节):" + msg.getDataLength());
System.out.println("消息的内容:\n" + msg.readStringOfByteLength(msg.getDataLength()));
System.out.println("---------------------------");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (queue != null) {
try {
queue.close();
} catch (MQException e) {
e.printStackTrace();
}
}
}
}
/**
* main方法测试
* @param args
*/
public static void main(String[] args) {
pushWarehouseOrderToGongfu();
}
}