websphere MQ 编程指南(Java)
来源:互联网 发布:英雄联盟 魔兽世界知乎 编辑:程序博客网 时间:2024/05/16 10:09
转载:http://blog.csdn.net/xfworld/article/details/16113415
接触websphere MQ 已经两年了,现在才搞明白有两种读取数据的方式,感觉狠汗颜。压根都没想着去了解一下,这次彻底的去查阅了一下官方的资料,本文除了介绍对应的读取方式也会提供关键性的代码,给予参考。
- 第一种格式:破坏性读取
从队列中直接获取信息,队列深度减少,信息自动清除。
- <span style="font-family:Microsoft YaHei;">int openOptions = MQC.MQOO_FAIL_IF_QUIESCING|MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;
- // 打开队列
- try {
- mQueue = qMgr.accessQueue(this.queuename,openOptions);
- logger.info("访问队列"+this.queuename);
- } catch (MQException exp) {
- logger.error(this.queuename+"队列访问失败",exp);
- } </span>
- 第二种格式:浏览性读取
采用浏览指针的方式获取队列中的信息,队列深度不减少,信息保留。
- <span style="font-family:Microsoft YaHei;">//浏览消息
- int openOptions = MQC.MQOO_FAIL_IF_QUIESCING|MQC.MQOO_BROWSE;
- // 打开队列
- try {
- mQueue = qMgr.accessQueue(this.queuename,openOptions);
- logger.info("访问队列"+this.queuename);
- } catch (MQException exp) {
- logger.error(this.queuename+"队列访问失败",exp);
- } </span>
以上主要区别在队列AccessQueue的参数上,参数的详解:
MQC.MQOO_FAIL_IF_QUIESCING
IBM官方的文档描述:Fail if the queue manager is quiescing.
MQC.MQOO_BROWSE
IBM官方的文档描述:Open to browse message.
MQC.MQOO_INPUT_AS_Q_DEF
IBM官方的文档描述:Open to get messages using queue-defined default.
MQC.MQOO_OUTPUT
IBM官方的文档描述:Open to put messages.
MQC.MQOO_INQUIRE
IBM官方的文档描述:Open for inquiry - required if you want to query properties
以上参数中MQC.MQOO_INQUIRE和读取队列的深度有关系,如果你要用到队列深度的话,必须采用这个参数。
以下是队列数据读取信息的代码:
- 破坏性读取
- try {
- int depth = this.getQueueDepth();
- //将队列的里的消息读出来
- if(depth>0)
- {
- MQMessage msg = new MQMessage();// 要读的队列的消息
- MQGetMessageOptions gmo = new MQGetMessageOptions();
- mQueue.get(msg, gmo);
- logger.info("消息的大小为:"+msg.getDataLength());
- System.out.println("---------------------------");
- str=new byte[msg.getDataLength()];
- msg.readFully(str);
- msg.clearMessage();}
- }
- catch (MQException e)
- {
- logger.error(e);} catch (Exception e) {logger.error(e);}
- <pre></pre>
- <pre></pre>
- <pre></pre>
以上参数byte[] str将会是最终的结果,将会以二进制的方式存储。
getQueueDepth()这个方式是获取当前队列的深度,实际上是调用mQueue.getCurrentDepth()
有多少条消息可以根据队列的深度来确定
- 浏览性读取
- <span style="font-family:Microsoft YaHei;"><span style="white-space:pre"> </span>boolean firstBrowsed = false;
- boolean isContinue = true;
- while (isContinue)
- {
- MQMessage mqMsg; // MQMessage instance
- MQGetMessageOptions mqGetMsgOpts; // MQGetMessageOptions instance
- mqMsg = new MQMessage();
- mqGetMsgOpts = new MQGetMessageOptions();
- //mqGetMsgOpts.waitInterval = 15000; // 15 second limit for waiting
- if (!firstBrowsed)
- {
- mqGetMsgOpts.options |= MQC.MQGMO_WAIT + MQC.MQGMO_BROWSE_FIRST;
- }
- else
- {
- mqGetMsgOpts.options |= MQC.MQGMO_WAIT + MQC.MQGMO_BROWSE_NEXT;
- }
- try
- {
- mQueue.get(mqMsg, mqGetMsgOpts);
- firstBrowsed = true;
- if (mqMsg.getMessageLength() > 0)
- {
- <span style="white-space:pre"> </span> String str=mqMsg.readString(mqMsg.getMessageLength()));
- }
- }
- catch (MQException mqe)
- {
- if (mqe.reasonCode != MQException.MQRC_NO_MSG_AVAILABLE)
- {
- try
- {
- qMgr.backout();
- }
- catch (MQException e)
- {
- // TODO Auto-generated catch block
- //logger.error(e);
- }
- }
- else
- {
- isContinue = false;
- }
- }
- catch (Exception e)
- {
- // TODO Auto-generated catch block
- logger.error(interfacename+"没有消息到达!");
- }
- }</span>
以上是参考代码中str将会以String的类型返回。这种读取的方式会直接过滤掉文件头,
如果需要做文件头分析,就要参考破坏性读取的代码,对接收这块重新修改。
以上详细描述了MQ对队列的读取的两种方式,希望对所有的MQ操作者有所帮助。
另外推荐一篇IBM官方的文档:
为中小型企业定制websphere MQ v7,这篇文档中基本就介绍了MQ使用的基本环境和要求,
以及实施和解决方案,以及监控方式。
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1106_arora/1106_arora.html
另外一片是关于优化MQ使用的:
在 Windows 和 UNIX 上配置和优化 WebSphere MQ 性能
这篇文档介绍了优化MQ的配置方式,非常详细推荐。
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0712_dunn/0712_dunn.html
0 0
- websphere MQ 编程指南(Java)
- websphere MQ 编程指南(Java)
- WebSphere MQ 入门指南
- WebSphere MQ 入门指南-1
- websphere mq java base classes
- Websphere编程之路--MQ编程初探
- Websphere编程之路--MQ编程初探
- WebSphere MQ配置和编程最佳实践
- WebSphere MQ
- WebSphere MQ
- Websphere MQ
- WebSphere MQ
- websphere mq
- 如何用Java去访问WebSphere MQ
- WebSphere MQ v6 Java组件诊断
- 搭建JAVA访问WebSphere MQ消息传输
- [原]如何使用java访问Websphere MQ
- websphere mq java调用mqi通信demo
- 学习记录——递归和堆栈
- hdu2604矩阵快速幂
- sublimetext mac常用快捷键
- java中Date的getTime()函数
- OC 基础之----属性
- websphere MQ 编程指南(Java)
- LightOJ 1070 Algebraic Problem (推导+矩阵快速幂)
- java io
- NSObject
- IOS开发中,SVN如何恢复到某一个版本(以Cornerstone为例)
- Linux从程序到进程
- 栈应用 - 后缀表达式的计算
- android paint的抗锯齿效果
- 轮播图的实现