IBM MQ中的MQQueue对象具有属性MQQueue.IsOpen
和MQQueue.OpenStatus
。两者都继承自MQManagedObject类。这些属性代表什么,它们之间有什么区别?例如,他们是否显示队列是否对GET
,PUT
或两者都开放?
不幸的是,这些属性的文档并不是很清楚。我找到的最有用的描述如下。请注意,这些是从ActiveX引用中获取的,因此我不知道它们的适用性。
IsOpen属性
返回队列是否打开。
只读。
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调用打开时是否相关?
答案 0 :(得分:3)
我认为没有更好的文档,但实际上是:
IsOpen会告诉您开放调用本身是否成功,即是否为队列维护了相关的句柄。
OpenStatus告诉您是否存在与队列管理器的有效连接,并且对象也是打开的。
从那时起,如果你想知道是否有最好的机会使用该对象,我可能会按照你的建议转向OpenStatus。我还要回应莫拉格和罗杰的评论,更好的异常处理和对国家的理解应该是一个更好的方法。