Queue的访问方式有多种:
MQOO_BROWSE:浏览,可获取其中的message,但是获取后,原有message依然存在
MQOO_INQUIRE:可以调用getCurrentDepth();其他状态会跑出异常
package com.iss.ibm.monitor;
import java.io.IOException;
import java.util.Date;
import com.ibm.mq.MQC;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.iss.ibm.monitor.model.QueueMonitorTotleModel;
public class QueueMonitor
{
private String qName;
private MQQueueManager queueManager;
public QueueMonitor(String qName, MQQueueManager queueManager)
{
this.qName = qName;
this.queueManager = queueManager;
}
/**
* 获取浏览状态的queue
* @author 王成(chengwangi@isoftstone.com)
* @date 2012-11-16 上午10:20:11
* @return
* @throws MQException
*/
@SuppressWarnings("deprecation")
public MQQueue getBrowseQueueForQName() throws MQException
{
MQQueue browseQueue = null;
MQException.log = null; /* don't print out any exceptions */
int openOptions = MQC.MQOO_BROWSE;
browseQueue = queueManager.accessQueue(qName, openOptions, null, null, null);
return browseQueue;
}
/**
* 获取浏览状态的queue
* @author 王成(chengwangi@isoftstone.com)
* @date 2012-11-16 上午10:20:11
* @return
* @throws MQException
*/
@SuppressWarnings("deprecation")
public int getQueueDepthForQName() throws MQException
{
MQQueue browseQueue = null;
MQException.log = null; /* don't print out any exceptions */
int openOptions = MQC.MQOO_INQUIRE;
browseQueue = queueManager.accessQueue(qName, openOptions, null, null, null);
try {
return browseQueue.getCurrentDepth();
} catch (MQException e1) {
// e1.printStackTrace();
}
return 0;
}
/**
* 获取queue的监控信息
* @author 王成(chengwangi@isoftstone.com)
* @date 2012-11-16 上午10:25:13
* @param queue
* @return
* @throws IOException
*/
@SuppressWarnings("deprecation")
public QueueMonitorTotleModel getQueueMonitorTotleMondel(MQQueue queue) throws IOException
{
QueueMonitorTotleModel totle = new QueueMonitorTotleModel();
totle.setQueueName(queue.name);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = gmo.options + MQC.MQGMO_BROWSE_NEXT;
MQMessage myMessage = new MQMessage();
int msgCount = 0;
long date = 0l;
while(true)
{
myMessage.clearMessage();
myMessage.correlationId = MQC.MQCI_NONE;
myMessage.messageId = MQC.MQMI_NONE;
try
{
queue.get(myMessage, gmo);
long currentDate = myMessage.putDateTime.getTimeInMillis();
if(date == 0 || currentDate <= date)
date = currentDate;
} catch (MQException e)
{
break;
}
msgCount ++;
}
totle.setMsgCount(msgCount);
totle.setEarliestMsgDate(new Date(date));
return totle;
}
/**
* 获取queue的监控信息
* @author 王成(chengwangi@isoftstone.com)
* @date 2012-11-16 上午10:25:13
* @param queue
* @return
* @throws IOException
*/
@SuppressWarnings("deprecation")
public QueueMonitorTotleModel getQueueMonitorTotleMondelForEarliestQueue(MQQueue queue) throws IOException
{
QueueMonitorTotleModel totle = new QueueMonitorTotleModel();
totle.setQueueName(queue.name);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = gmo.options + MQC.MQGMO_BROWSE_NEXT;
MQMessage myMessage = new MQMessage();
int msgCount = 0;
long date = 0l;
myMessage.clearMessage();
myMessage.correlationId = MQC.MQCI_NONE;
myMessage.messageId = MQC.MQMI_NONE;
try
{
queue.get(myMessage, gmo);
long currentDate = myMessage.putDateTime.getTimeInMillis();
date = currentDate;
} catch (MQException e)
{}
totle.setMsgCount(msgCount);
totle.setEarliestMsgDate(new Date(date));
return totle;
}
}