如何在 Jmeter 中使用 Beanshell 在 MQ 标头中设置编码



我正在开发一个测试脚本,使用 IBM MQ API 8.0 将消息放入队列。我正在使用JMeter 3.1和Beanshell Sampler(见下面的代码(。

我遇到的问题是在 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());
    }

我认为你想多了。 如果您没有进行某种奇怪的手动字符/数据转换,那么您应该使用:

sendmsg.encoding = MQC.MQENC_NATIVE;

最新更新