前两章,粗略的讲述了如何使用WebShphere MQ Explorer来完成发送消息的功能,但仅限与在客户端使用,在IBM客户端中的工具栏里,选择帮助-WebSphereMQ教程会有更为详细的教程。在这里我就不多说了。接下来,我们编写JAVA测试类来查看发送的消息。
PS:我這裡有一些關於MQ的文檔教程,有需要的大家可以在這裡下載
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;
/*
* 可以在MQ的资源管理器的某一个队列上放入测试消息、浏览消息等
* 可以放入多条消息,按先进先出的方式取得
*/
public class MQTest {
private String qManager; // QueueManager名
private MQQueueManager qMgr; // 队列管理器名称
private MQQueue qQueue; // 消息通道
String HOST_NAME; // 主机名,在这里我填写了IP地址
int PORT = 0; // 端口号
String Q_NAME; // 本地队列
String CHANNEL; // 连接通道
int CCSID;
String Msg;
/**
* 初始化
*/
public void init() {
try {
HOST_NAME = "10.10.10.223";
PORT = 1414;
qManager = "QM_APPLE";
Q_NAME = "Q1";
CHANNEL = "QM_ORANGE.QM_APPLE";
CCSID = 1383; // 表示是简体中文,
MQEnvironment.hostname = HOST_NAME;
MQEnvironment.port = PORT;
MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";
MQEnvironment.CCSID = CCSID;
qMgr = new MQQueueManager(qManager);
int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_OUTPUT;
qQueue = qMgr.accessQueue(Q_NAME, qOptioin);
} catch (MQException e) {
e.printStackTrace();
System.out.println("发生了一起异常,异常原因:" + e.reasonCode);
}
}
void finalizer() {
try {
qQueue.close();
qMgr.disconnect();
} catch (MQException e) {
System.out.println("发生了一起异常,异常原因:" + e.reasonCode);
}
}
/*
* 获取消息
*/
public void GetMsg() throws ClassNotFoundException {
try {
MQMessage revMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
revMessage.characterSet=CCSID;
revMessage.encoding=CCSID;
gmo.options += MQC.MQPMO_SYNCPOINT;
qQueue.get(revMessage, gmo);
String revString = revMessage.readStringOfByteLength(revMessage.getMessageLength());
System.out.println("接收到的内容:"+revString);
} catch (RuntimeException e) {
e.printStackTrace();
} catch (MQException e) {
if (e.reasonCode != 2033) // 没有消息
{
System.out.println("发生了一起异常,异常原因:" + e.reasonCode);
e.printStackTrace();
}
} catch (java.io.IOException e) {
System.out.println("发生了一起IO异常:" + e);
e.printStackTrace();
}
}
/**
* 发送消息
*
* @param qByte
*/
public void SendMsg(String msgStr) {
try {
MQMessage qMsg = new MQMessage();
qMsg.encoding=CCSID;
qMsg.characterSet=CCSID;
qMsg.writeString(msgStr);
MQPutMessageOptions pmo = new MQPutMessageOptions();
qQueue.put(qMsg, pmo);
System.out.println("消息发送成功!发送的内容是:" + msgStr);
} catch (MQException e) {
System.out.println("发生了一起异常,异常原因:" + e.reasonCode);
} catch (java.io.IOException e) {
System.out.println("发生了一起IO异常:" + e);
}
}
public static void main(String[] args) {
MQTest mqst = new MQTest();
mqst.init();
try {
mqst.SendMsg("你好,我是一条测试消息!");
mqst.GetMsg();
} catch (Exception e) {
e.printStackTrace();
}
mqst.finalizer();
}
}
我把注释都加在了类里,应该不难懂,编写到这里,可能会遇到各种各种的问题。我在测试的时候,仅遇到1个2059的错误,只需要把CHANNEL的值改成我类里的即可,不要填写自己创建的通道名。其他如果有遇到错误,请百度错误代码来寻求更多的帮助。
IBM WebSphere MQ讲解1:http://blog.csdn.net/u012552275/article/details/62046103
IBM WebSphere MQ讲解2:http://blog.csdn.net/u012552275/article/details/62216360
IBM WebSphere MQ讲解2——JAVA测试:http://blog.csdn.net/u012552275/article/details/62216565
WebSphere MQ使用:http://blog.csdn.net/u012552275/article/details/70194285
使用JAVA代码发送MQ消息:http://blog.csdn.net/u012552275/article/details/70194644
JAVA发送接收MQ代码示例:http://blog.csdn.net/u012552275/article/details/70194969