【问题标题】:Get queues depth from java code从 java 代码中获取队列深度
【发布时间】:2012-01-29 11:11:02
【问题描述】:

任何人都可以帮助在 java 中编写获取队列深度的代码。我们在 IBM WebSphere MQ 中有 4 个队列,其中有消息。

我想编写一个 jsp 来在运行报告时读取队列名称及其深度。我怎么做? 任何人都可以帮助获得完整的解决方案,因为我不知道该怎么做

【问题讨论】:

标签: java jms ibm-mq


【解决方案1】:

我认为没有办法使用 JMS 检索队列深度。但是,您可以使用 MQ 系列特定的 Java API 来检索此信息。这是示例代码。关注int openOptions = MQC.MQOO_INQUIRE;

这里是reference guide

int depth = 0;
MQQueueManager qMgr; // define a queue manager object
String mqHost = "";
String mqPort = "";
String mqChannel = "";
String mqQMgr = "";
String mqQueue = "";
try {
    // Set up MQSeries environment
   MQEnvironment.hostname = mqHost;
   MQEnvironment.port = Integer.valueOf(mqPort).intValue();
   MQEnvironment.channel = mqChannel;
   MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,
   MQC.TRANSPORT_MQSERIES);
   qMgr = new MQQueueManager(mqQMgr);
   int openOptions = MQC.MQOO_INQUIRE;
   MQQueue destQueue = qMgr.accessQueue(mqQueue, openOptions);
   depth = destQueue.getCurrentDepth();
   destQueue.close();
   qMgr.disconnect();
} catch (Exception err) {
   err.printStackTrace();
}

【讨论】:

  • 感谢 Pangea。我是否必须配置队列配置并将您的代码保存为 .java 并运行它?还是我应该做点别的?
  • @user1080320 下载 MQ Java api 的库,将其放在类路径中并运行此代码。队列很可能允许 INQUIRY 访问,但有时我认为这可能在生产队列中被禁用或仅限制少数管理员用户。另外,如果这对您有帮助,请点赞并接受答案。
  • Pangea,您的主题很有帮助,但是我在哪里可以获得 MQ Java Api,它是什么?在哪个类路径中?
  • @user1080320 关注此文档并在他们的论坛上发布以查找从publib.boulder.ibm.com/infocenter/wmqv6/v6r0/… 下载的位置
【解决方案2】:

如果您从 IBM 下载安装 WMQ 客户端(而不是仅从 QMgr 安装中获取类库),您将获得示例代码。提供的示例中有几个列出队列名称、查询对象属性和创建对象。在 Win 7 上的默认安装中,这些可以在 C:\Program Files (x86)\IBM\WebSphere MQ\tools\pcf\samples 找到。

在此处下载 WMQ 客户端库:

强烈建议您使用最新的 WMQ 客户端进行任何新的开发。它适用于目标 QMgr 提供的任何功能级别的所有先前版本的 WMQ。请参阅信息中心的Compatibility & Interop statement。您可以从WMQ Library landing page 找到您正在使用的 WMQ 版本的服务器或客户端的信息中心。

【讨论】:

    【解决方案3】:

    其中一些函数在 IIB 中已被弃用,因此我粘贴了更新后的代码。它有效:)

    享受

    从 Java 获取 MQ 队列深度:

    try {
            int depth = 0;
            MQQueueManager qMgr; // define a queue manager object
            String mqHost = "";
            String mqPort = "";
            String mqChannel = "";
            String mqQMgr = "";
            String mqQueue = "";
            try {
                // Set up MQSeries environment
               MQEnvironment.hostname = mqHost;
               MQEnvironment.port = Integer.valueOf(mqPort).intValue();
               MQEnvironment.channel = mqChannel;
               //MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES);
               qMgr = new MQQueueManager(mqQMgr);
               //int openOptions = 1;//MQC.MQOO_INQUIRE;
    
    
    
               int openOptions = CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED;
    
    
               MQQueue destQueue = qMgr.accessQueue(mqQueue, openOptions);
               depth = destQueue.getCurrentDepth();
               destQueue.close();
               qMgr.disconnect();
    
    
                MbMessage outMessage = new MbMessage();
                outAssembly = new MbMessageAssembly(inAssembly, outMessage);
                MbElement root = outMessage.getRootElement();
                MbElement outXmlRoot =  root.createElementAsLastChild(MbXMLNSC.PARSER_NAME);
                MbElement Appointment = outXmlRoot.createElementAsLastChild(MbElement.TYPE_NAME, "RootElementXMLName", null);
                Appointment.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Q_DepthFromServer", depth);        
                out.propagate(outAssembly);    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多