C++ 中的隐式操作
可及时执行几个隐式操作,以满足成功执行某种方法的先决条件。 这些隐式操作是连接、打开、重新打开、关闭和断开连接。 您可以使用类属性来控制连接和打开隐式行为。
连接
对于任何导致调用MQI的方法,都会自动连接一个 ImqQueueManager 对象(参见 C++和MQI的交叉引用 )。
打开
对于导致 MQGET、MQINQ、MQPUT 或 MQSET 调用的任何方法,都会自动打开一个 ImqObject 对象。 使用 openFor 方法以指定一个或多个相关的打开选项值。
重新打开
对于导致 MQGET、MQINQ、MQPUT 或 MQSET 调用的任何方法,都会自动重新打开一个 ImqObject,其中对象已打开,但现有的打开选项不足以成功调用 MQI。 使用临时关闭选项值 MQCO_NONE 临时关闭对象。 使用 openFor 方法来添加相关的 open 选项。
在特定情况下,重新打开可能会导致问题:
- 临时动态队列在关闭时会被销毁,且永远无法重新打开。
- 在关闭和重新打开期间,其他人可能有机会访问打开的用于独占输入的队列(显式或缺省情况下)。
- 当队列关闭时,会丢失浏览光标位置。 此情况不会阻止关闭和重新打开,但会阻止后续使用光标,直到再次使用 MQGMO_BROWSE_FIRST。
- 当队列关闭时,会丢失检索的最后一条消息的上下文。
如果其中任何一种情况发生或可预见,请在打开对象(显式或隐式)之前通过显式设置足够的打开选项来避免重新打开。
为复杂的队列处理情况显式设置打开选项能够提高性能,并避免与使用重新打开相关的问题。