(七)使用IBMMQ javaAPI对集群进行异步消息的接收

前言:使用第六篇中组建的IBMMQ集群、IBMMQ官方提供的javaAPI,编写代码对集群发送消息并检测负载均衡的效果,若还不了解集群怎样搭建,请移步 : (六)IBMMQ简单集群搭建.

1. 准备工作

  1. jar文件
    (1). com.ibm.mq.jar
    (2).connector.jar

2.创建普通java工程,并添加jar到工程中

(七)使用IBMMQ javaAPI对集群进行异步消息的接收_第1张图片

3. 接收消息的代码

该代码在接收消息达到1000条时会关闭,想要无限接收消息,可自行使用while循环中尝试

package com.qinke.mqcluster;

import com.ibm.mq.*;

import java.io.IOException;

public class Receiver {
    private static String host = "192.168.137.14";
    private static Integer port=1415;
    private static String channel="TESTCHANNEL";
    private static String qmgr="CQM4";
    private static String queueName="CQ1";
    private static void init(){
        //配置要使用的队列管理器的信息,这里使用队列管理器CQM1的信息
        MQEnvironment.hostname=host;
        MQEnvironment.port=port;
        MQEnvironment.channel=channel;
    }
    public static void receive(){
        try {
            //创建队列管理器对象,在实例化的时候会隐式连接队列管理器CQM1
            MQQueueManager mqQueueManager = new MQQueueManager(qmgr);
            //定义打开方式
            int openOption = MQC.MQOO_INPUT_SHARED; //以读取方式打开
            //直接循环,每次发10条消息
            //创建队列对量
            MQQueue queue = mqQueueManager.accessQueue(queueName,openOption);
            //定义获取消息时的一些操作
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = gmo.options + MQC.MQGMO_WAIT; //无消息时等待
            gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING; //队列管理器停止时退出等待
            gmo.waitInterval = 300000; //无消息时等待时长
            for(int i=0;i<=1000;i++){
                //创建简单消息对象
                MQMessage mqMessage = new MQMessage();
                queue.get(mqMessage,gmo);
                String msgContent = mqMessage.readUTF();
                System.out.println(msgContent);
            }
            //关闭打开的资源,养成好习惯
            queue.close();
            mqQueueManager.disconnect();
        } catch (MQException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        init();
        receive();
    }
}


4. 测试代码效果

(七)使用IBMMQ javaAPI对集群进行异步消息的接收_第2张图片

5. 附消息发送代码

package com.qinke.mqcluster;

import com.ibm.mq.*;

import java.io.IOException;

public class Sender {
    private static void init(){
        //配置要使用的队列管理器的信息,这里使用队列管理器CQM1的信息
        MQEnvironment.hostname="192.168.137.11";
        MQEnvironment.port=1415;
        MQEnvironment.channel="TESTCHANNEL";
    }
    public static void send(){
        try {
            //创建队列管理器对象,在实例化的时候会隐式连接队列管理器CQM1
            MQQueueManager mqQueueManager = new MQQueueManager("CQM1");
            //定义打开方式
            int openOption = MQC.MQOO_OUTPUT; //以写入方式打开
            openOption  = openOption + MQC.MQOO_BIND_NOT_FIXED;//写入消息方式为不绑定方式(想要负载均衡必须为此方式)
            //直接循环,每次发10条消息
            //创建队列对量
            MQQueue queue = mqQueueManager.accessQueue("CQ1",openOption);
            for(int i=0;i<=10;i++){
                //创建简单消息对象
                MQMessage mqMessage = new MQMessage();
                //将数据写入消息对象中(可自行尝试其他write方法)
                mqMessage.writeUTF("简单消息:"+i);
                //使用队列发送消息
                queue.put(mqMessage);
            }
            //关闭打开的资源,养成好习惯
            queue.close();
            mqQueueManager.disconnect();
        } catch (MQException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        init();
        send();
    }
}

此文章代码亦可用于单节点IBMMQ发送与接收消息
项目地址:异步消息发送与接收.

你可能感兴趣的:(IBM,MQ)