一.准备工作
1.IBM WebSphere MQ安装,给用户赋权限
参考: http://my.oschina.net/barter/blog/115502完成WebSphere MQ安装,给用户赋权限(不要创建队列管理器,本地队列,通道,下边有创建步骤)
用户赋权成功如下图所示:
二.创建MQ队列管理器,本地队列,通道
命令方式均在windows控制台 C:\Program Files (x86)\IBM\WebSphere MQ\bin> 路径下执行1.创建队列管理器
使用 WebSphere MQ 资源管理器:
1.启动 WebSphere MQ 资源管理器。2.在“导航器”视图中,右键单击队列管理器文件夹,然后单击新建 > 队列管理器。 将打开“创建队列管理器”向导。
在队列管理器名称字段中,输入 QM_JACK 。
3.单击两次下一步。 确保从选择队列管理器启动类型选项中选择自动。
4.单击下一步。
5.确保选中创建配置用于 TCP/IP 的侦听器复选框。
6.如果完成按钮不可用,那么在侦听端口号字段中输入另一个端口号。 如果当前值为 1414,那么尝试使用另一个端口号,例如:1415 或 1416。如果此阶段未使用缺省端口号 1414,请记录所使用的端口号,因为在本教程的后面阶段中 QM_JACK 充当接收队列管理器时将需要此端口号。
7.单击完成。
使用 MQSC 创建队列管理器:
1.通过输入以下命令,创建名为 QM_JACK 的队列管理器:crtmqm QM_JACK
2.通过输入以下命令来启动此队列管理器:
strmqm QM_JACK
2.创建本地队列
使用 WebSphere MQ 资源管理器:
1.在“导航器”视图中,展开队列管理器文件夹。2.展开队列管理器 QM_JACK 。
3.右键单击队列文件夹,然后单击新建 > 本地队列。 将打开“新建本地队列”向导。
4.在名称字段中,输入 QUEUE_RECV 。
5.单击完成。
使用 MQSC 本地队列:
1.通过输入以下命令来启用 MQSC 命令:runmqsc QM_JACK
2.输入以下命令:
define qlocal(QUEUE_RECV)
此时会显示消息,告诉您已经创建了队列和缺省 WebSphere MQ 对象。
3.通过输入以下命令来停止 MQSC:
end
3.创建通道
使用 WebSphere MQ 资源管理器:
1.在 QM_JACK队列管理器右键通道2.新建,服务器连接通道
3.输入名称 QUEUE_RECV
4.下一步完成
三.验证MQ是否配置成功
1.发送消息:
amqsput 本地队列 队列管理器amqsput QUEUE_RECV QM_JACK
随便输入一些消息,然后连敲二次回车,完成消息发送
2.接收消息:
amqsget 本地队列 队列管理器amqsget QUEUE_RECV QM_JACK
四.java发送接收消息
java代码依赖的jar包下载地址:
http://download.csdn.net/detail/adam_zs/9617526
package com.ceair.mq;
import java.io.IOException;
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;
/**
* @Title WebSphere MQ 发送/接受消息
* @Description
* @author wangzs
* @date 2016-8-30
*/
public class WebSphereMQ {
// 定义队列管理器和队列的名称
private static String hostname = "10.80.63.101"; // MQ服务器的IP地址
private static int port = 1414; // MQ端口
private static int ccsid = 1381; // 服务器MQ服务使用的编码1381代表GBK、1208代表UTF
private static String qmName = "QM_JACK"; // MQ的队列管理器名称;
private static String channel = "CNN_JACK"; // 服务器连接的通道
private static String qName = "QUEUE_RECV"; // MQ远程队列的名称;
private static MQQueueManager qMgr;
// 初始化
static {
MQEnvironment.hostname = hostname;
MQEnvironment.channel = channel;
MQEnvironment.CCSID = ccsid;
MQEnvironment.port = port;
try {
// 定义并初始化队列管理器对象并连接
qMgr = new MQQueueManager(qmName);
} catch (MQException e) {
System.out.println("初使化MQ出错");
e.printStackTrace();
}
}
// 往MQ发送消息
public static String sendMessage(String message) {
try {
// 设置将要连接的队列属性
int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
// 连接队列,关闭了就重新打开
if (qMgr == null || !qMgr.isConnected()) {
qMgr = new MQQueueManager(qmName);
}
MQQueue queue = qMgr.accessQueue(qName, openOptions);
// 定义一个简单的消息
MQMessage putMessage = new MQMessage();
// 将数据放入消息缓冲区
putMessage.writeUTF(message);
// 将消息写入队列
queue.put(putMessage, new MQPutMessageOptions());
queue.close();
} catch (MQException ex) {
ex.printStackTrace();
System.out.println("A WebSphere MQ error occurred : Completion code " + ex.completionCode + " Reason code "
+ ex.reasonCode);
} catch (IOException ex) {
System.out.println("An error occurred whilst writing to the message buffer: " + ex);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
qMgr.disconnect();
} catch (MQException e) {
e.printStackTrace();
}
}
return "sendMessage success! {" + message + "}";
}
// 从队列中去获取消息,如果队列中没有消息,就会发生异常
public static String getMessage() {
String message = null;
try {
// 设置将要连接的队列属性
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
MQMessage retrieve = new MQMessage();
// 设置取出消息的属性(默认属性)
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;// 在同步点控制下获取消息
gmo.options = gmo.options + MQC.MQGMO_WAIT; // 如果在队列上没有消息则等待
gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// 如果队列管理器停顿则失败
gmo.waitInterval = 1000; // 设置等待的毫秒时间限制
// 关闭了就重新打开
if (qMgr == null || !qMgr.isConnected()) {
qMgr = new MQQueueManager(qmName);
}
MQQueue queue = qMgr.accessQueue(qName, openOptions);
// 从队列中取出消息
queue.get(retrieve, gmo);
message = retrieve.readUTF();
queue.close();
} catch (MQException ex) {
System.out.println("A WebSphere MQ error occurred : Completion code " + ex.completionCode + " Reason code "
+ ex.reasonCode);
} catch (IOException ex) {
System.out.println("An error occurred whilst writing to the message buffer: " + ex);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
qMgr.disconnect();
} catch (MQException e) {
e.printStackTrace();
}
}
return " getMessage success! {" + message + "} ";
}
}
package com.ceair.mq;
import org.junit.Test;
/**
* @Title 测试WebSphere MQ 发送/接受消息
* @Description
* @author wangzs
* @date 2016-8-30
*/
public class TestWebSphereMQ {
@Test
public void testSendMessage() {
System.out.println(WebSphereMQ.sendMessage("TestWebSphereMQ hello word!"));
}
@Test
public void testGetMessage() {
System.out.println(WebSphereMQ.getMessage());
}
}
测试结果:
sendMessage success! {TestWebSphereMQ hello word!}
getMessage success! {TestWebSphereMQ hello word!}