2012-01-30 5 views
4

내 응용 프로그램에서 Websphere MQ 당 대기열 통계 (마지막 메시지 가져 오기/넣기 시간, 대기열/대기열에서 제외 된 메시지 수, 현재 대기열 깊이, 연결된 클라이언트 수)를 쿼리해야합니다. PCFAgent를 통해 큐의 깊이를 얻을 수 있었지만, IBM 문서가 다소 혼란 스럽기 때문에 나머지 부분에 대해서는 다소 고생했습니다.Java에서 MQ 대기열 통계 가져 오기

도움이되는 유용한 참고 자료 (또는 코드 예)를 알고 있습니까?

답변

9

기본 위치에 WMQ 클라이언트를 설치 한 경우 샘플은 C:\Program Files (x86)\IBM\WebSphere MQ\tools\pcf\samples이됩니다.

UNIX 형식에서는 /opt/mqm/samp으로 끝납니다.

jar 파일을 잡고 클라이언트를 설치하지 않은 경우 샘플, 추적 유틸리티, 진단 도구 등 지원되는 구성이 없습니다. 클라이언트 설치 미디어는 무료로 제공됩니다 SupportPacs page에서 다운로드하십시오. 버전 7.1은 SupportPac MQC71

당신이 있는지 확인 SupportPac MQC7

  • 6.0이 SupportPac MQC6입니다

    • 버전 (V6의 수명이 2012 9월입니다)
    • 버전 7.0입니다 : 현재 사용할 수있는 다른 클라이언트는 는 연결하려는 WebSphere MQ Server 버전의 Infocenter를보고 있습니다. 또한 v7 QMgr에 연결하고 v6 클라이언트를 사용하는 경우 사용중인 상수 및 클래스가 v6 기능으로 제한됩니다. 최신 QMgr 버전과 항상 역 호환되므로 최신 클라이언트를 사용하는 것이 좋습니다.

      UPDATE :

      는 여기에 몇 가지 코드 조각이 요청 된 기능을 수행 할 수 있습니다 :

      먼저 당신은 큐 관리자 연결 (qmgr)가 필요합니다. 그럼 당신은 만들 수 PCFMessageAgent :

      // Create PCF Message Agent 
      try { 
          pcfAgent = new PCFMessageAgent(qmgr); 
      } catch (MQException mqe) { 
          System.err.println("PCF Message Agent creation ended with reason code " 
               + mqe.reasonCode); 
          return mqe.reasonCode; 
      } 
      

      당신이 아래의 호출합니다 (ENQ/DEQ 카운트 제외)는 사용하여 필요한 속성의 대부분을 얻을 수 있습니다. 마지막 msg get 시간을 얻으려면 대기열 모니터링 (MONQ)을 켜야합니다.

      // Prepare PCF command to inquire queue status (status type) 
      inquireQueueStatus = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_STATUS); 
      inquireQueueStatus.addParameter(CMQC.MQCA_Q_NAME, "name of queue to inquire"); 
      inquireQueueStatus.addParameter(CMQCFC.MQIACF_Q_STATUS_TYPE, CMQCFC.MQIACF_Q_STATUS); 
      inquireQueueStatus.addParameter(CMQCFC.MQIACF_Q_STATUS_ATTRS, new int[] { 
              CMQC.MQCA_Q_NAME, CMQC.MQIA_CURRENT_Q_DEPTH, 
              CMQCFC.MQCACF_LAST_GET_DATE, CMQCFC.MQCACF_LAST_GET_TIME, 
              CMQCFC.MQCACF_LAST_PUT_DATE, CMQCFC.MQCACF_LAST_PUT_TIME, 
              CMQCFC.MQIACF_OLDEST_MSG_AGE, CMQC.MQIA_OPEN_INPUT_COUNT, 
              CMQC.MQIA_OPEN_OUTPUT_COUNT, CMQCFC.MQIACF_UNCOMMITTED_MSGS }); 
      

      당신은 사용 PARMS를 검색 할 수 있습니다

      pcfResp = pcfAgent.send(inquireQueueStatus); 
      

      를 각각의 PARMS하십시오 (XXXXXX 데이터의 유형입니다)을 getXXXXXParameterValue 방법을 사용할 수 있습니다. ENQ/DEQ 카운트를 들어

      , 당신은 큐 통계를 재설정해야합니다

      // Prepare PCF command to reset queue statistics 
      queueResetStats = new PCFMessage(CMQCFC.MQCMD_RESET_Q_STATS); 
      queueResetStats.addParameter(CMQC.MQCA_Q_NAME, queueName); 
      
      pcfResp3 = pcfAgent.send(queueResetStats); 
      
      queueMsgDeqCount = pcfResp3[0].getIntParameterValue(CMQC.MQIA_MSG_DEQ_COUNT); 
      queueMsgEnqCount = pcfResp3[0].getIntParameterValue(CMQC.MQIA_MSG_ENQ_COUNT); 
      

      당신이 더 많은 질문이 있으면 알려주세요.

  • +0

    ListQueueDepth 샘플은 이미 큐 깊이를 가져 오는 데 사용한 샘플입니다.불행히도 필요한 다른 통계 (마지막 메시지 가져 오기/넣기 시간, en/dequeued 메시지 수, 연결된 클라이언트 수)를 다루는 샘플이없는 것으로 보입니다. – CAFxX

    +1

    철저한 답변을 보내 주셔서 감사합니다! enq/deq 카운트가 너무 나쁘면 통계를 재설정해야합니다. – CAFxX

    +1

    나는 그것을 "WMQ의 양자 API 호출"이라고 부른다 : 값을 관찰하는 행위는 값을 변경시킨다. 나는 그 행동을 결코 정말로 좋아하지 않았다. 새 기능 "대기열 통계 조회"를 요청하려면 http://bit.ly/WMQReq에있는 WMQ 요청 양식을 사용하십시오. –