• java 使用IBMMQ


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

  • 相关阅读:
    element-ui实现表格el-table展开行
    jQuery请求本地JSON文件,在谷歌浏览器运行时报跨域错误
    jQuery使用serialize获取form表单数据,中文乱码问题
    Element-ui局部添加loading效果
    Vue中this.$set的使用
    项目管理【81】 | 项目立项管理
    项目管理【80】 | 知识产权与标准规范-标准规范
    项目管理【79】 | 知识产权与标准规范-政府采购法法
    项目管理【78】 | 知识产权与标准规范-招投标法
    项目管理【77】 | 知识产权与标准规范-合同法
  • 原文地址:https://www.cnblogs.com/baimj/p/16178138.html
Copyright © 2020-2023  润新知