IBMMQ java远程访问(四)

当应用程序和MQ不在同一台主机上的时候,我们将要通过通道去访问;

1.创建队列管理器时勾选创建服务器链接通道;

2.创建一个本地队列

命名为Q1

3.创建通道

右击通道->新建->服务器链接通道

命名为SERVERQM2

4.代码示例调用

package com.ibmmq.util.mqutil;

import com.ibm.mq.*;
import com.ibm.mq.constants.MQConstants;

public class MqDemo {
    private MQQueueManager qMgr;
    private MQQueue sendQueue;
    private MQQueue receiveQueue;
    private static int CCSID = 1381;//编码字符标识,通道-属性-常规
    private static String hostname = "192.168.31.239";
    int port = 1415;
    static String queueManagerName = "QM_2";
    static String queueName = "Q1";
    static String channel = "SERVERQM2";
    static String userId = "administrator";
    static String password = "zcy123456";

    public MqDemo() throws MQException {
        MQEnvironment.hostname = hostname;
        MQEnvironment.port = port;
        MQEnvironment.channel = channel;
        MQEnvironment.CCSID = CCSID;
        MQEnvironment.userID = userId;     //MQ中拥有权限的用户名
        MQEnvironment.password = password; //用户名对应的密码
        qMgr = new MQQueueManager(queueManagerName);//创建队列管理器

    }
    public void sendMsg(String msgStr) {
        int openOptions  = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT | MQConstants.MQOO_INQUIRE;
        try {
            // 建立通道的连接
            sendQueue = qMgr.accessQueue(queueName, openOptions, null, null, null);

            MQMessage msg = new MQMessage();// 要写入队列的消息
            msg.format = MQConstants.MQFMT_STRING;
            msg.characterSet = CCSID;
            msg.encoding = CCSID;
            msg.writeUTF(msgStr);

            MQPutMessageOptions pmo = new MQPutMessageOptions();
            msg.expiry = -1; // 设置消息永不过期

            sendQueue.put(msg, pmo);// 将消息放入队列
            qMgr.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sendQueue != null) {
                try {
                    sendQueue.close();
                } catch (MQException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public void receiveMsg() {
        int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT | MQConstants.MQOO_INQUIRE;
        try {
            receiveQueue = qMgr.accessQueue(queueName, openOptions, null, null, null);
            int depth = receiveQueue.getCurrentDepth();
            System.out.println("该队列当前的深度为:" + depth);

            // 将队列的里的消息读出来
            while (depth-- > 0) {
                MQMessage rcvMessage = new MQMessage();// 要读的队列的消息
                MQGetMessageOptions gmo = new MQGetMessageOptions();
                receiveQueue.get(rcvMessage, gmo);
                String msgText = rcvMessage.readUTF();
                System.out.println("消息的内容:" + msgText);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (receiveQueue != null) {
                try {
                    receiveQueue.close();
                } catch (MQException e) {
                    e.printStackTrace();
                }
            }
            try {
                qMgr.disconnect();
            } catch (MQException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws MQException {
        new MqDemo().sendMsg("我是第一条消息");
        new MqDemo().sendMsg("我是第二条消息");
        new MqDemo().receiveMsg();
    }
}

5.常见问题

完成代码为“2”,原因为“2058” MQ远程队列的名称 错误

完成代码为“2”,原因为“2540” 服务器连接的通道 错误

完成代码为“2”,原因为“2018” 未连接至队列管理器。

完成代码为“2”,原因为“2035” 权限错误(用户密码错误也会报2035)

右击QM_2-属性-通信-通道认证记录修改为已禁用;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下大名

您的鼓励就是我前进的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值