前言:使用第六篇中组建的IBMMQ集群、IBMMQ官方提供的javaAPI,编写代码对集群发送消息并检测负载均衡的效果,若还不了解集群怎样搭建,请移步 : (六)IBMMQ简单集群搭建.
1. 准备工作
- jar文件
(1). com.ibm.mq.jar
(2).connector.jar
2.创建普通java工程,并添加jar到工程中
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. 测试代码效果
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发送与接收消息
项目地址:异步消息发送与接收.