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();
    }
}