Websphere 7 MQueue: how to access queue depth from Java?

17,358

Solution 1

I used the jars from WS 7.0.1.1

com.ibm.mq.jar com.ibm.mq.jmqi.jar com.ibm.mq.jmqi.system.jar com.ibm.mq.commonservices.jar com.ibm.mq.headers..jar com.ibm.mq.jmqi.remote.jar

I got the Queue Manager name and the Channel name from "IBM Webshpere MQ Explorer" (Client Connection node in the tree)

    import com.ibm.mq.MQEnvironment;
    import com.ibm.mq.MQQueue;
    import com.ibm.mq.MQQueueManager;
    import com.ibm.mq.constants.CMQC;
    int openOptions = CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED;

    MQEnvironment.hostname = "10.2.51.19";
    MQEnvironment.port = 1414;
    MQEnvironment.channel = "SW1_QM_CH1";

    MQQueueManager qMgr = new MQQueueManager("SW1_QM");

    MQQueue destQueue = qMgr.accessQueue("E_RETRY",   openOptions);
    System.out.println("E_RETRY size:" + destQueue.getCurrentDepth());
    destQueue.close();
    qMgr.disconnect();

Hope this helps someone else out!

Solution 2

If you want something that works for both SIBus and MQ implementations you are best to stick with the JMS API's (as these are then also portable to other implementations of JMS as well).

So what I'd do is:

//ctx is InitialContext
ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/CF");
Connection conn = cf.createConnection();
conn.start();

Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup("jms/MyQueue");
QueueBrowser qb = session.createBrowser(queue);

//sadly, getting this enum is the best the JMS API can offer.
//but the upside is the code is portable AND it can run over MQ and SIBus
//implementations.
Enumeration queueMessageEnum = qb.getEnumeration();
int count = 0;
while(queueMessageEnum.hasMoreElements()) {
  queueMessageEnum.nextElement();
  count++;
}
Share:
17,358
mehmet
Author by

mehmet

Java and JS developer for the past 20+ years.

Updated on June 05, 2022

Comments

  • mehmet
    mehmet almost 2 years

    I'd like to write some code to monitor the queue size on Websphere 7 MQ. This is the code I've come up with

       MQEnvironment.hostname = "10.21.1.19"; 
       MQEnvironment.port = 1414;
       MQEnvironment.channel = "SYSTEM.CDEF.SVRCONN";
       MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
    
       MQQueueManager qMgr = new MQQueueManager("MYQMGR");
    
       MQQueue destQueue = qMgr.accessQueue("PUBLISH", MQC.MQOO_INQUIRE);
       System.out.println(destQueue.getCurrentDepth());
       destQueue.close();
       qMgr.disconnect();
    

    How do I know what the "Channel" is?

    How do I know what the queue manager name is that I pass into MQQueueManager?

    Or is there another API that I should look at?

    I need it work with WRS 7 SIB and MQ.

    Thanks Jeff Porter