由于最近开发一个MQ接口项目,故用到了IBM的Websphere MQ中间件,关于MQ的一些常规性知识我这里不作叙述,这些也不属本站经验篇范畴之内,MQ支持众多语言,本文是JAVA的API。现以列表体现:
1、给消息定义标识(ID)的方法:
//使发送的消息标识为 200601
String id="200601";
MQMessage inMsg = new MQMessage(); //创建消息缓冲区
inMsg.messageId=id.getBytes();
String msgString=null;
queue.set(inMsg,gmo);
//接受标识为 200601的消息,其它的将不接受。
MQMessage inMsg = new MQMessage(); //创建消息缓冲区
inMsg.messageId=id.getBytes();
String msgString=null;
queue.get(inMsg,gmo);
以messageId来给消息一个标识,这个标识是字符型的,即String类型的。
2、正确读取整条消息内容
String msgString;
msgString=inMsg.readStringOfByteLength(inMsg.getDataLength());
inMsg.messageId=id.getBytes();
String msgString=null;
queue.get(inMsg,gmo);
//msgString=inMsg.readUTF();
String msgString;
msgString=inMsg.readStringOfByteLength(inMsg.getDataLength());
读取消息常用的方法有:
readString(长度)
readStringOfByteLength(长度)
//以上两个方法为适用于读出整个消息
readLine()
//读取一行
大多数教程中,均使用readString方法,但这个方法有些问题,现在不推荐使用,有些文件可以读,有些文件由于其长度getDataLength获得不对,所以导致出错。所以,我们用readStringOfByteLength来获得整个消息。其参数可以为消息的长度。
3、获得消息内容的长度:
getDataLength
getMessageLength
这两个方法都是获得消息长度,getDataLength是未读出的消息长度,比较,你已经用read方法读取了2000长度的消息,那么getDataLength就是消息总找度减去已读的这部分。而getMessageLength是整个消息的长度。无论是否read它的值是不变的。
inMsg.messageId=id.getBytes();
String msgString=null;
queue.get(inMsg,gmo);
//String k=new String(inMsg.messageId,"gb2312");
//System.out.println(k.trim());
//msgString=inMsg.readUTF();
String msg;
msgString=inMsg.readStringOfByteLength(inMsg.getDataLength());
System.out.println("消息:\n" + msgString);
System.out.println("\n消息长度:\n" + inMsg.getMessageLength());
System.out.println("\n消息长度getDataLength:\n" + inMsg.getDataLength());
qMgr.commit();//提交事务处理