2017-04-11 6 views
2

년으로 Beanshell를 사용하여 MQ 헤더에 인코딩을 설정하는 방법. JMeter 3.1과 Beanshell Sampler를 사용하고 있습니다 (아래 코드 참조).내가 IBM MQ의 API 8.0을 사용하여 큐에 메시지를 넣어 테스트 스크립트를 개발하고 JMeter를

나는 MQ 헤더에서 "인코딩"필드를 설정하는 것입니다 데 문제. API 문서마다 다른 방법을 시도했지만 나에게 도움이되는 것은 없습니다.

사람은이 문제에 직면 했습니까?

미리 감사드립니다. 아래

코드 :

try { 
     MQEnvironment.hostname = _hostname; 
     MQEnvironment.channel = _channel; 
     MQEnvironment.port = _port; 
     MQEnvironment.userID = ""; 
     MQEnvironment.password = ""; 

     log.info("Using queue manager: " + _qMgr); 
     MQQueueManager _queueManager = new MQQueueManager(_qMgr); 

     int openOptions = CMQC.MQOO_OUTPUT + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INQUIRE + CMQC.MQOO_BROWSE 
      + CMQC.MQOO_SET_IDENTITY_CONTEXT; 

     log.info("Using queue: " + _queueName + ", openOptions: " + openOptions); 
     MQQueue queue = _queueManager.accessQueue(_queueName, openOptions); 

     log.info("Building message..."); 
     MQMessage sendmsg = new MQMessage(); 
     sendmsg.clearMessage(); 

     // Set MQ MD Headers 
     sendmsg.messageType = CMQC.MQMT_DATAGRAM; 

     sendmsg.replyToQueueName = _queueName; 
     sendmsg.replyToQueueManagerName = _qMgr; 

     sendmsg.userId = MQuserId; 

     sendmsg.setStringProperty("BAH_FR", fromBIC); // from /AppHdr/Fr/FIId/FinInstnId/BICFI 
     sendmsg.setStringProperty("BAH_TO", toBIC); // from /AppHdr/To/FIId/FinInstnId/BICFI 
     sendmsg.setStringProperty("BAH_MSGDEFIDR", "pacs.008.001.05"); // from /AppHdr/MsgDefIdr 
     sendmsg.setStringProperty("BAH_BIZSVC", "cus.clear.01-" + bizSvc); // from /AppHdr/BizSvcr 
     sendmsg.setStringProperty("BAH_PRTY", "NORM"); // priority 
     sendmsg.setStringProperty("userId", MQuserId); // user Id 

     sendmsg.setStringProperty("ConnectorId", connectorId); 
     sendmsg.setStringProperty("Roles", roleId); 

     MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same as MQPMO_DEFAULT constant 

     pmo.options = CMQC.MQOO_SET_IDENTITY_CONTEXT; // set identity context by userId 

     // Build message 
     String msg = "<NS1> .... </NS1>"; 

     // MQRFH2 Headers 
      sendmsg.format = CMQC.MQFMT_STRING; 
      //sendmsg.encoding = CMQC.MQENC_INTEGER_NORMAL | CMQC.MQENC_DECIMAL_NORMAL | CMQC.MQENC_FLOAT_IEEE_NORMAL; 
      sendmsg.encoding = 546; // encoding - 546 Windows/Linux 

      sendmsg.messageId = msgID.getBytes(); 
      sendmsg.correlationId = CMQC.MQCI_NONE; 

      sendmsg.writeString(msg); 

      String messageIdBefore = new String(sendmsg.messageId, "UTF-8"); 

      log.info("Before put, messageId=[" + messageIdBefore + "]"); 

      int depthBefore = queue.getCurrentDepth(); 
      log.info("Queue Depth=" + depthBefore); 
      log.info("Putting message on " + _queueName + ".... "); 
      queue.put(sendmsg, pmo); 
      int depthAfter = queue.getCurrentDepth(); 
      log.info("Queue Depth=" + depthAfter); 

      log.info("**** Done"); 

      String messageIdAfter = new String(sendmsg.messageId, "UTF-8"); 
      log.info("After put, messageId=[" + messageIdAfter + "]"); 

      log.info("Closing connection..."); 

    } catch (Exception e) { 
      log.info("\\nFAILURE - Exception\\n"); 
      StringWriter errors = new StringWriter(); 
      e.printStackTrace(new PrintWriter(errors)); 
      log.error(errors.toString()); 
    } 

답변

1

는 당신이 문제를 생각 이상 생각합니다. 당신이 이상한 수동 문자/데이터 변환의 일종을 수행하지 않는 경우에 당신은 사용해야합니다 :

sendmsg.encoding = MQC.MQENC_NATIVE;