C++ 中的隐式操作

及时执行几个隐式操作,以满足成功执行某种方法的先决条件。 这些隐式操作是连接、打开、重新打开、关闭和断开连接。 您可以使用类属性来控制连接和打开隐式行为。

连接

对于任何导致调用MQI的方法,都会自动连接一个 ImqQueueManager 对象(参见 C++和MQI的交叉引用 )。

打开

对于导致 MQGET、MQINQ、MQPUT 或 MQSET 调用的任何方法,都会自动打开一个 ImqObject 对象。 使用 openFor 方法以指定一个或多个相关的打开选项值。

重新打开

对于导致 MQGET、MQINQ、MQPUT 或 MQSET 调用的任何方法,都会自动重新打开一个 ImqObject,其中对象已打开,但现有的打开选项不足以成功调用 MQI。 使用临时关闭选项值 MQCO_NONE 临时关闭对象。 使用 openFor 方法来添加相关的 open 选项

在特定情况下,重新打开可能会导致问题:
  • 临时动态队列在关闭时会被销毁,且永远无法重新打开。
  • 在关闭和重新打开期间,其他人可能有机会访问打开的用于独占输入的队列(显式或缺省情况下)。
  • 当队列关闭时,会丢失浏览光标位置。 此情况不会阻止关闭和重新打开,但会阻止后续使用光标,直到再次使用 MQGMO_BROWSE_FIRST。
  • 当队列关闭时,会丢失检索的最后一条消息的上下文。

如果其中任何一种情况发生或可预见,请在打开对象(显式或隐式)之前通过显式设置足够的打开选项来避免重新打开。

为复杂的队列处理情况显式设置打开选项能够提高性能,并避免与使用重新打开相关的问题。

关闭

ImqObject 在对象状态不再可行的任意时刻都会自动关闭,例如,ImqObject 连接引用被切断,或 ImqObject 对象被销毁。

断开连接

ImqQueueManager 在连接不再可行的任意时刻都会自动断开连接,例如,ImqObject 连接引用被切断,或 ImqQueueManager 对象被销毁。