【问题标题】:Websphere MQ - error with reason code 2042 on a getWebsphere MQ - 获取错误,原因代码为 2042
【发布时间】:2014-10-27 03:27:58
【问题描述】:

我们在 ImqQueue::get( ImqMsg &, ImqGetMessageOptions & ); 调用中遇到间歇性错误,原因代码为 2042,根据 Websphere 文档,这不应该发生™;我们应该只在打开时获得该原因代码。

此错误是否表明 服务器 无法在其一侧打开队列,还是表明我们的客户端存在问题?处理此错误的最佳方法是什么?现在我们只记录它的发生,但它正在发生很多。不幸的是,我并不精通 Websphere MQ。我会边走边学,所以我没有所有的术语都是正确的。

我们的客户端是用 C++ 编写的,链接 libmq 6.0.2.4 并在 SLES-10 上运行。除了运行 7.1 版之外,我不知道服务器的详细信息。我们要求升级以使我们的方面保持最新。我们有多个客户端实例同时运行;所有人都使用相同的请求队列,但每个人都使用MQOO_INPUT_EXCLUSIVE + MQOO_INPUT_FAIL_IF_QUIESCING 创建自己的动态回复队列。

【问题讨论】:

    标签: c++ ibm-mq suse


    【解决方案1】:

    如果队列尚未打开,ImqQueue::get 方法将为您隐式打开队列。这最终将使用 MQOO_INPUT_AS_Q_DEF 选项,因此将使用队列上的 DEFSOPT(EXCL|SHARED) 属性。您还应该仔细检查队列是否定义为 SHARE 而不是 NOSHARE,但我怀疑已经正确设置了。

    您提到您有多个应用程序实例同时运行,因此如果其中一个实例将队列隐式打开为 MQOO_INPUT_AS_Q_DEF 导致来自 DEFSOPT 的 MQOO_INPUT_SHARED,那么如果其他人打开它,它将获得 2042 (MQRC_OBJECT_IN_USE)。如果当时没有其他任何东西打开它,那么隐式打开将起作用,以后的实例将改为获得 2042。

    如果它是间歇性的,那么我建议在您的应用程序中有一条不调用 ImqQueue::open 方法的路径。当您寻找时,将队列定义更改为 DEFSOPT(SHARED) 应该可以摆脱 2042。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 2012-10-06
      • 2012-11-21
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多