队列上的IBM MQ的IsOpen和OpenStatus属性有什么区别?

时间:2015-02-02 14:34:28

标签: java c# message-queue ibm-mq

IBM MQ中的MQQueue对象具有属性MQQueue.IsOpenMQQueue.OpenStatus。两者都继承自MQManagedObject类。这些属性代表什么,它们之间有什么区别?例如,他们是否显示队列是否对GETPUT或两者都开放?

不幸的是,这些属性的文档并不是很清楚。我找到的最有用的描述如下。请注意,这些是从ActiveX引用中获取的,因此我不知道它们的适用性。

Source

  

IsOpen属性

     

返回队列是否打开。

     

只读。

Source

  

OpenStatus属性

     

只读。指示队列是否已打开。 AccessQueue方法之后的初始值为TRUE,New之后的初始值为FALSE。

在下一步中,我调试了amqmdnet.dll,它显示了属性的以下实现:

public bool IsOpen
{
  get
  {
    return this.objectHandle != null && this.objectHandle.HOBJ != null && (this.objectHandle.HOBJ.Handle != 0 && -1 != this.objectHandle.HOBJ.Handle);
  }
}

public bool OpenStatus
{
  get
  {
    bool flag = false;
    if (this.qMgr != null && this.qMgr.IsConnected)
      flag = !this.isClosed;
    return flag;
  }
}

虽然我倾向于使用OpenStatus,但我仍在寻找有根据的建议。我特别不确定IsOpen属性实际代表什么。在判断队列实例是否为put和get调用打开时是否相关?

1 个答案:

答案 0 :(得分:3)

我认为没有更好的文档,但实际上是:

IsOpen会告诉您开放调用本身是否成功,即是否为队列维护了相关的句柄。

OpenStatus告诉您是否存在与队列管理器的有效连接,并且对象也是打开的。

从那时起,如果你想知道是否有最好的机会使用该对象,我可能会按照你的建议转向OpenStatus。我还要回应莫拉格和罗杰的评论,更好的异常处理和对国家的理解应该是一个更好的方法。