研究MQ很长时间了, 每个类,方法,都查了很长时间,在此总结一下!
Java编写访问MQ的程序
1、MQQueueManager―――队列管理器访问类
常用方法:
public MQQueueManager(String queueManagerName)―――建立一个管理器实例
创建队列管理器有两种方式:
1:绑定方式,这种方式要求MQ服务器与应用程序同属一台服务器,效率比较高。
2:客户机方式:这种方式应用程序和MQ服务器可以不在同一台服务器上,但是要考虑到MQ权限的问题,尤其是MQ7.5之后,权限变的很复杂,慎重对待。
注:如果使用绑定的方式则可以直接创建一个新的队列管理器实例。但是在某些平台下这样直接创建会出错,必须采用MQClient的方式进行连接。此时需要先定义服务通道,端口,服务名等环境变量,再创建一个队列管理器实例。如:
[html] view plain copy
- MQEnvironment.hostname = "IP地址";
- MQEnvironment.channel = "channelname";
- MQEnvironment.port = port ;
- MQEnvironment.CCSID = CCSID;
- MQQueueManager qMgr = new MQQueueManager(hostname);
其中hostname表示队列管理器所在的机器地址(一般在本地则填localhost或127.0.0.1)。
port就是队列管理器的侦听端口。
Channel定义访问的服务器通道名(需要自己在队列管理器中先定义,其方法类似与一般通道的定义,不过类型是服务器通道)
public bool isConnected()―――返回队列管理器是否在连接状态
public synchronized void disconnect()―――断开队列管理器的连接
2、MQQueue―――队列访问类
常用方法:
通常MQQueue实例的生成通过调用MQQueueManager的accessQueue方法类实例化。
public synchornized MQQueue accessQueue(String QueueName,int openOptions)―――返回一个连接队列的实例(类名为:MQQueue)
常用方法:
public synchronized void get(MQMessage message,MQGetMessageOptions gmo)―――从队列管理器读取一条
消息通过message实例返回。MQGetMessageOptions的用法下面再详述。
public synchronized void put(MQMessage message,MQPutMessageOptions pmo)―――往队列管理器放入一条
消息 MQPutMessageOptions的用法下面再详述
public synchronized void close()―――关闭队列的连接
3.openOptions---队列的打开方式
常用值有:
MQC.MQOO_FAIL_IF_QUIESCING―――如果队列管理器停止则返回失败
MQC.MQOO_OUTPUT――――以写方式打开队列
MQC.MQOO_INPUT_AS_Q_DEF―――以队列默认读取方式打开队列 使用的时候可以采用与操作来实现多种打开队列方式,
MQC.MQOO_BROWSE;――――以浏览方式打开队列
MQC.MQGMO_BROWSE_NEXT; ――――浏览下一个消息
如:
int openOptions = MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF; 表示以读、写方式打开队列
4.MQMessage―――消息操作类 常用方法:
public MQMessage()―――默认构造函数
public int getDataLength()―――返回可读取的消息的长度(以byte作为单位)
public void readFully(byte b[])―――读取消息到数组b中,长度以b的数组长度为准
属性:
format = MQC.MQFMT_STRING;
msg.characterSet = ccsid;//字符集
msg.encoding = ccsid;//写的字符集
一般读取消息的操作为:
[html] view plain copy
- MQMessage message = new MQMessage(); ….
- int length = message.getDataLength();
- byte buffer[] = new byte[length];
- message.readFully(buffer);
public void write(byte b[])―――把指定的字节数组写入消息
一般写消息的操作为:
[html] view plain copy
- byte[] buffer = “asdasdad”.getBytes();
- MQMessage message = new MQMessage(); ….
- message.write(buffer);
- queue.put(message….
5.MQGetMessageOptions―――取消息操作选项
常用方法:
public MQGetMessageOptions()―――默认构造函数
public int options―――操作选项(位操作)
public int matchOptions―――条件选项(按照某种条件获取消息)
public int waitInterval―――等待时长(单位:毫秒)仅当options选项有MQC.MQGMO_WAIT才有效
6.MQPutMessageOptions―――放消息操作选项
常用方法:
public MQPutMessageOptions()―――默认构造函数
public int options―――操作选项(位操作)
7.MQ自带连接池
MQ队列管理器有自己的连接池,可以使用连接池获得连接
我们可以使用的MQ自己的默认连接池
MQPoolToken token=MQEnvironment.addConnectionPoolToken();
这样就会把在本线程中对队列管理器的连接纳入到了MQ自带的线程管理机制中(qm.disconnect()实际上就是将qm的连接重新放回池中 qm= new MQQueueManager()会去池里找一个可用的连接赋给qm)
因为队列管理器是选择了侦听端口,可以使用netstat -an |grep 9004 看到连接到这个队列管理器上连接.