【问题标题】:How to create a MQQueueManager object in JMeter?如何在 JMeter 中创建 MQQueueManager 对象?
【发布时间】:2021-10-30 19:13:15
【问题描述】:

我需要一些帮助来了解为什么我的库不适用于 MQQUEUEMANAGER

这是我的代码:

import java.util.Hashtable;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQQueue;
import com.ibm.mq.constants.MQConstants;

Hashtable mqProps = new Hashtable();
mqProps.put(MQConstants.CHANNEL_PROPERTY, "my_channel");
mqProps.put(MQConstants.PORT_PROPERTY, my_port);
mqProps.put(MQConstants.HOST_NAME_PROPERTY, "my_host");
mqProps.put(MQConstants.USER_ID_PROPERTY, "my_user_id");
mqProps.put(MQConstants.PASSWORD_PROPERTY, "my_password");

MQQueueManager qMgr = new MQQueueManager("my_QM", mqProps);

vars.putObject("QMGR", qMgr);

我导入了以下库:com.ibm.mq.allclient-9.2.3.0

但我有一个错误:

Target exception: com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'.
 in inline evaluation of: ``import java.util.Hashtable; import com.ibm.mq.MQQueueManager; import com.ibm.mq. . . . '' at line number 14
javax.script.ScriptException: Sourced file: inline evaluation of: ``import java.util.Hashtable; import com.ibm.mq.MQQueueManager; import com.ibm.mq. . . . '' : Typed variable declaration : Object constructor : at Line: 14 : in file: inline evaluation of: ``import java.util.Hashtable; import com.ibm.mq.MQQueueManager; import com.ibm.mq. . . . '' : new MQQueueManager ( "my_QM" , mqProps )

我需要在构造函数中使用另一个特定的参数吗?

你知道为什么 JMeter 会产生错误吗?

【问题讨论】:

  • JMeter 没有产生这个错误,队列管理器产生了。它还在其 AMQERR01.LOG 文件中写入了有关为什么会生成此错误的信息。如果您需要进一步的帮助,请查看那里并使用错误消息中的详细信息更新您的问题。

标签: java jmeter ibm-mq


【解决方案1】:

目标异常:com.ibm.mq.MQException:MQJE001:完成代码 “2”,原因“2035”。

2035 (MQRC_NOT_AUTHORIZED) 的 MQ 原因码表示应用程序正在使用的 UserId 没有权限连接到队列管理器。

mqProps.put(MQConstants.CHANNEL_PROPERTY, "my_channel");

“my_channel”是一个示例,但请确保它不以“SYSTEM”开头。您应该使用自己唯一命名的频道。

mqProps.put(MQConstants.USER_ID_PROPERTY, "my_user_id"); mqProps.put(MQConstants.PASSWORD_PROPERTY, "my_password");

远程服务器上是否存在这些凭据,以便队列管理器可以验证这些凭据?您是否授予该 UserId 连接到队列管理器的权限?即使用setmqaut command

授予 UserId 打开队列的权限怎么样? (再次使用setqmaut command)。

始终最好将权限授予 UserId 的组而不是 UserId(也称为原则)。

setmqaut -m {QM_NAME} -t qmgr -g {GROUP} +connect +inq +dsp
setmqaut -m {QM_NAME} -n ABC.** -t queue -g {GROUP} +allmqi +dsp

注意:“**”通配符是正确的。 IBM MQ 区分“*”和“**”通配符。

这 2 个 setmqaut 命令将:

  • 设置连接到队列管理器的权限并
  • 设置打开所有以“ABC”开头的队列的权限。

【讨论】:

    【解决方案2】:
    1. 看起来你正在使用Beanshell,这不是你应该像since JMeter 3.1 you're supposed to be using Groovy那样做的事情

    2. 如果尽管如此,您仍然愿意使用 Beanshell,请注意它掩盖了问题,因此您需要将 debug(); operator 放在“您的”脚本中的某个位置(但它看起来像是取自 here)或围绕您的代码进入try block 喜欢:

      try {
          //the code you copied and pasted without understanding what it is doing
      }
      catch (Exception ex) {
          log.error("Failure in the copied and pasted script", ex);
          throw ex;
      }  
      

      这样您将在 jmeter.log file 中看到更人性化的堆栈跟踪,并能够找出问题的根本原因

    我没有看到代码有任何问题,即使使用 Beanshell 也可以正常工作,这是证据:

    您可能还会发现 IBM MQ testing with JMeter - Learn How 文章很有用。

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2013-03-27
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多