ibmmq下载,发送消息,接受消息

  • Post author:
  • Post category:其他




ibmmq下载,发送消息,接受消息

1.下载地址


ibmmq下载



下载地址2


如图:

在这里插入图片描述

下载完后 解压 得到如下图文件 然后运行Setup

在这里插入图片描述

安装时直接下一步:建议在安装时,【网络配置】,【是否需要配置域用户标识】,勾选了【否】。后续的域环境也,也选择没有。

2.安装成功后就开始新建队列管理器了

操作如图

在这里插入图片描述

其中名字任意,需要建死信队列就把名字加进去。其余的默认设置即可,监听端口如果新建第一个,默认的是1414。

在这里插入图片描述

队列管理器建好后 会有如下图 黄色方块 B_NA…的队列管理器 当然了名字是自己的

下一步呢就是新建队列了 如下图 点击队列右击鼠标新建则会有各种队列类型 首先选择 本地队列

在这里插入图片描述

本地队列名字也是自己定 (如果是有其他的机器的话 那这个本地队列名就是其他机器的远程队列名)

在这里插入图片描述

然后新建传输队列 这个其实也是一个本地队列 只是把用法改为传输即可

在这里插入图片描述

然后就是新建远程队列了 远程队列中的队列名称自己定 重要的是 下图三个红框框注意了 A 是自己目前的机器 B则是其他机器

在这里插入图片描述

然后开始新建通道 其中通道又分为很多种

如果说是Java代码 与这台机器的通道 则成为 服务器通道

用于自己机器与别的机器发送消息的则是发送通道

同于接受别的通道发来的信息的是接收通道

在这里插入图片描述

新建一个发送通道 IP是指机器所在电脑的ip地址 端口号 则是在一开始创建队列管理器时的监听端口号 默认为1414 (此发送通道名称和别的机器的接收方通道名称相同) 其中传输队列 填的是自己的传输队列

在这里插入图片描述

接收方通道名字则是于别的机器的发送发通道名称相同

在这里插入图片描述

然后就是创建服务器连接通道,名字自己给,用于后面的java程序测试,其余默认设置

在这里插入图片描述

此时 本机的队列传输管理器以及队列 和通道建完

然后在本机 可以模拟一个 别的机器的队列管理器 则是 在重新来一遍操作 名字要注意哦

等建完后那就可以测试啦

此时选择其中一个队列管理器中的远程队列 鼠标右击 放入测试数据

在这里插入图片描述

在这里插入图片描述

如果成功了的话 那就可以在另一台机器上的本地队列里看到这个消息啦

好了 那现在就来看看代码吧

3.JAVA代码的操作 这几个包必要

在这里插入图片描述

导包完后 就可以开始操作了

还有一个要注意的地方

就是登入名个密码 要在系统的用户合组里面添加一个用户 并且属于mqm这个组 具体方法我懒得写了 可以百度一下 然后操作完后 要到ibmmq中设置一下通道认证 可以参考https://blog.csdn.net/wanggangabc111/article/details/76835648

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.ibm.mq.MQC;
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;

public class IBMMQUtils {
  //队列管理器
    static MQQueueManager qMgr;
    //字符集
    static int            CCSID       = 1381;
    
    public void ibmmq(String msgStr) {
        //本地接口
        MQEnvironment.hostname = "192.168.0.147";
        //本地服务器连接通道
        MQEnvironment.channel = "NANTONG_TD_FWLJ";
        //监听器的段端口
        MQEnvironment.port = 1414;
        //字符集
        MQEnvironment.CCSID = CCSID;
        //        //MQ中拥有权限的用户名
          MQEnvironment.userID = "root";
        //        //用户名对应的密码
         MQEnvironment.password = "123456zc";
        try {
            //队列管理器
            qMgr = new MQQueueManager("NANTONGGF_COMPANY_QUEUE_MANAGER");
        } catch (MQException e) {
            e.printStackTrace();
        }
        //发消息
        sendMsg(msgStr);
        //收消息
       // receiveMsg();
     
    }


  //发送消息
    public  void sendMsg(String msgStr) {
        MQQueue queue = null;
        try {
            // NT_FG 本地队列   49     给本地队列  发消息     这一句是从队列管理器中获取本地队列  ---------- NT_FG_YC远程  16
            queue = qMgr.accessQueue("NT_FG_YC", 16, null, null, null);
             //当队列深度为零时  queue.getCurrentDepth() 会报错  2038  
             // 所以 在给远程队列放消息是  这一句可以注释掉   或者  try catch
            System.out.println("发送消息前的深度为:" + queue.getCurrentDepth());
            MQMessage msg = new MQMessage();// 要写入队列的消息
            msg.format = MQC.MQFMT_STRING;
            msg.characterSet = CCSID;
            msg.encoding = CCSID;
            // 将数据放入消息缓冲区
            msg.writeUTF(msgStr);
           // msg.writeString(msgStr);  //将消息写入本地队列
            MQPutMessageOptions pmo = new MQPutMessageOptions();
            msg.expiry = -1; // 设置消息用不过期
            queue.put(msg, pmo);// 将消息放入队列
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (queue != null) {
                try {
                    queue.close();
                } catch (MQException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
     }


     //获取消息
    public  void receiveMsg() {
        int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
        MQQueue queue = null;
        try {
            //获取本地消息队列  第一个参数 要获取什么队列 就填什么队列的名字  
            // 第二个参数 本地   49   远程 16
            queue = qMgr.accessQueue("NT_FG", 49, null, null, null);
            System.out.println("该队列当前的深度为:" + queue.getCurrentDepth());
            System.out.println("===========================");
            logger.info("该队列当前的深度为" ,queue.getCurrentDepth());
            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()));
                logger.info("消息的大小为(字节)" ,msg.getDataLength());
                logger.info("消息的内容" ,msg.readStringOfByteLength(msg.getDataLength()));
                System.out.println("---------------------------");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (queue != null) {
                try {
                    queue.close();
                } catch (MQException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

具体的导包啥的参考

参考:https://blog.csdn.net/qq_17616169/article/details/54633005



版权声明:本文为Hxuening原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。