MQQueue.NET

使用 MQQueue 可发送和接收消息以及 IBM® MQ 队列的查询属性。 使用构造函数或 MQQueueManager.AccessProcess 方法创建 MQQueue 对象。

System.Object
        |
        └─ IBM.WMQ.MQBase
                |
                └─ IBM.WMQ.MQBaseObject
                        |
                        └─ IBM.WMQ.MQManagedObject
                                |
                                └─ IBM.WMQ.MQDestination
                                        |
                                        └─ IBM.WMQ.MQQueue
public class IBM.WMQ.MQQueue extends IBM.WMQ.MQDestination;

属性

获取属性时抛出 MQException 的测试。

public int ClusterWorkLoadPriority {get;}
指定队列的优先级。 此参数仅对本地,远程和别名队列有效。
public int ClusterWorkLoadRank {get;}
指定队列的列组。 此参数仅对本地,远程和别名队列有效。
public int ClusterWorkLoadUseQ {get;}
指定当目标队列具有本地实例和至少一个远程集群实例时 MQPUT 操作的行为。 如果 MQPUT 源自集群通道,那么此参数不适用。 此参数仅对本地队列有效。
public DateTime CreationDateTime {get;}
创建此队列的日期和时间。
public int CurrentDepth {get;}
获取当前在队列中的消息数。 在 put 调用期间以及在回退 get 调用期间,此值递增。 在非浏览获取期间以及在回退 put 调用期间,将对其进行递减。
public int DefinitionType {get;}
队列的定义方式。 可能的值为:
  • MQC.MQQDT_PREDEFINED
  • MQC.MQQDT_PERMANENT_DYNAMIC
  • MQC.MQQDT_TEMPORARY_DYNAMIC
public int InhibitGet {get; set;}
控制您是可以获取此队列上的消息还是获取此主题的消息。 可能的值为:
  • MQC.MQQA_GET_INHIBITED
  • MQC.MQQA_GET_ALLOWED
public int InhibitPut {get; set;}
控制是可以将消息放入此队列还是针对此主题。 可能的值为:
  • MQQA_PUT_INHIBITED
  • MQQA_PUT_ALLOWED
public int MaximumDepth {get;}
队列中可同时存在的最大消息数。 尝试将消息放入已包含此大量消息的队列失败,原因码为 MQC.MQRC_Q_FULL
public int MaximumMessageLength {get;}
此队列中每条消息中可存在的应用程序数据的最大长度。 尝试放置大于此值的消息失败,原因码为 MQC.MQRC_MSG_TOO_BIG_FOR_Q
public int NonPersistentMessageClass {get;}
放入此队列的非持久消息的可靠性级别。
public int OpenInputCount {get;}
当前对从队列中除去消息有效的句柄数。 OpenInputCount是本地队列管理器已知的有效输入句柄总数,而不仅仅是应用程序创建的句柄。
public int OpenOutputCount {get;}
当前对将消息添加到队列有效的句柄数。 OpenOutputCount是本地队列管理器已知的有效输出句柄总数,而不仅仅是应用程序创建的句柄。
public int QueueAccounting {get;}
指定是否可以对队列启用记帐信息收集。
public int QueueMonitoring {get;}
指定是否可以对队列启用监视。
public int QueueStatistics {get;}
指定是否可以对队列启用统计信息收集。
public int QueueType {get;}
具有下列其中一个值的此队列的类型:
  • MQC.MQQT_ALIAS
  • MQC.MQQT_LOCAL
  • MQC.MQQT_REMOTE
  • MQC.MQQT_CLUSTER
public int Shareability {get;}
是否可以多次打开队列以进行输入。 可能的值为:
  • MQC.MQQA_SHAREABLE
  • MQC.MQQA_NOT_SHAREABLE
public string TPIPE {get;}
用于使用 IBM MQ IMS 网桥与 OTMA 通信的 TPIPE 名称。
public int TriggerControl {get; set;}
是否将触发器消息写入启动队列,以启动应用程序来为队列提供服务。 可能的值为:
  • MQC.MQTC_OFF
  • MQC.MQTC_ON
public string TriggerData {get; set;}
队列管理器插入到触发器消息中的自由格式数据。 当到达此队列的消息导致触发器消息写入启动队列时,它会插入 TriggerData 。 字符串的最大允许长度由 MQC.MQ_TRIGGER_DATA_LENGTH给出。
public int TriggerDepth {get; set;}
当触发器类型设置为 MQC.MQTT_DEPTH时,在写入触发器消息之前必须在队列上的消息数。
public int TriggerMessagePriority {get; set;}
消息不参与触发器消息生成的消息优先级。 即,队列管理器在决定是否生成触发器时忽略这些消息。 值为零将导致所有消息生成触发器消息。
public int TriggerType {get; set;}
由于消息到达此队列而写入触发器消息的条件。 可能的值为:
  • MQC.MQTT_NONE
  • MQC.MQTT_FIRST
  • MQC.MQTT_EVERY
  • MQC.MQTT_DEPTH

方法

public void Get(MQMessage message);
public void Get(MQMessage message, MQGetMessageOptions getMessageOptions);
public void Get(MQMessage message, MQGetMessageOptions getMessageOptions, int MaxMsgSize);

抛出 MQException

从队列获取消息。

如果 get 失败,那么 MQMessage 对象保持不变。 如果成功,那么 MQMessage 的消息描述符和消息数据部分将替换为来自入局消息的消息描述符和消息数据。

从特定 MQQueueManagerIBM MQ 的所有调用都是同步的。 因此,如果执行带有等待的 get ,那么将阻止使用相同 MQQueueManager 的所有其他线程进行进一步的 IBM MQ 调用,直到完成 Get 调用为止。 如果需要多个线程同时访问 IBM MQ ,那么每个线程都必须创建自己的 MQQueueManager 对象。

message
包含消息描述符和返回的消息数据。 消息描述符中的某些字段是输入参数。 确保根据需要设置 MessageIdCorrelationId 输入参数非常重要。
对于在 MQGM_SYNCPOINT下接收到的消息,可重新连接的客户机在成功重新连接后返回原因码 MQRC_BACKED_OUT
getMessageOptions
控制获取操作的选项。

使用选项 MQC.MQGMO_CONVERT 可能会导致在从单字节字符代码转换为双字节代码时发生异常,原因码为 MQC.MQRC_CONVERTED_STRING_TOO_BIG 。 在这种情况下,会将消息复制到缓冲区中而不进行转换。

如果未指定 getMessageOptions ,那么使用的消息选项为 MQGMO_NOWAIT

如果在可重新连接的客户机中使用 MQGMO_LOGICAL_ORDER 选项,那么将返回 MQRC_RECONNECT_INCOMPATIBLE 原因码。

MaxMsgSize
此消息对象要接收的最大消息。 如果队列上的消息大于此大小,那么将发生以下两种情况之一:
  • 如果在 MQGetMessageOptions 对象中设置了 MQGMO_ACCEPT_TRUNCATED_MSG 标志,那么将使用尽可能多的消息数据来填充消息。 抛出异常时带有 MQCC_WARNING 完成代码和 MQRC_TRUNCATED_MSG_ACCEPTED 原因码。
  • 如果未设置 MQGMO_ACCEPT_TRUNCATED_MSG 标志,那么消息将保留在队列中。 抛出异常时带有 MQCC_WARNING 完成代码和 MQRC_TRUNCATED_MSG_FAILED 原因码。

如果未指定 MaxMsgSize ,那么将检索整个消息。

public void Put(MQMessage message);
public void Put(MQMessage message, MQPutMessageOptions putMessageOptions);

抛出 MQException

将消息放入队列。

完成 Put 调用后对 MQMessage 对象的修改不会影响 IBM MQ 队列或发布主题上的实际消息。

Put 会更新 MQMessage 对象的 MessageIdCorrelationId 属性,并且不会清除消息数据。 进一步的 PutGet 调用引用 MQMessage 对象中的更新信息。 例如,在以下代码片段中,第一条消息包含 a 和第二条 ab
msg.WriteString("a");
q.Put(msg,pmo);
msg.WriteString("b");
q.Put(msg,pmo);
message
包含消息描述符数据和要发送的消息的 MQMessage 对象。 由于此方法,可以更改消息描述符。 在此方法完成后,消息描述符中的值是已放入队列或已发布到主题的值。

以下原因码将返回到可重新连接的客户机:

  • MQRC_CALL_INTERRUPTED : 如果在对持久消息运行 Put 调用时连接中断,并且重新连接成功。
  • MQRC_NONE (如果在对非持久消息运行 Put 调用时连接成功) (请参阅 应用程序恢复 )。
putMessageOptions
用于控制 put 操作的选项。
如果未指定 putMessageOptions ,那么将使用 MQPutMessageOptons 的缺省实例。
如果在可重新连接的客户机中使用 MQPMO_LOGICAL_ORDER 选项,那么将返回 MQRC_RECONNECT_INCOMPATIBLE 原因码。
注: 为了实现简单性和性能,如果要将单个消息放入队列,请使用 MQQueueManager.Put 对象。 您应该具有此对象的 MQQueue 对象。
public void PutForwardMessage(MQMessage message);
public void PutForwardMessage(MQMessage message, MQPutMessageOptions putMessageOptions);

抛出 MQException

将正在转发的消息放入队列中,其中 message 是原始消息。

message
包含消息描述符数据和要发送的消息的 MQMessage 对象。 由于此方法,可以更改消息描述符。 在此方法完成后,消息描述符中的值是已放入队列或已发布到主题的值。

以下原因码将返回到可重新连接的客户机:

  • MQRC_CALL_INTERRUPTED : 如果在对持久消息运行 Put 调用时连接中断,并且重新连接成功。
  • MQRC_NONE (如果在对非持久消息运行 Put 调用时连接成功) (请参阅 应用程序恢复 )。
putMessageOptions
用于控制 put 操作的选项。
如果未指定 putMessageOptions ,那么将使用 MQPutMessageOptons 的缺省实例。
如果在可重新连接的客户机中使用 MQPMO_LOGICAL_ORDER 选项,那么将返回 MQRC_RECONNECT_INCOMPATIBLE 原因码。
public void PutReplyMessage(MQMessage message)
public void PutReplyMessage(MQMessage message, MQPutMessageOptions putMessageOptions)

抛出 MQException

将应答消息放入队列中,其中 message 是原始消息。

message
包含消息描述符和返回的消息数据。 消息描述符中的某些字段是输入参数。 确保根据需要设置 MessageIdCorrelationId 输入参数非常重要。
对于在 MQGM_SYNCPOINT下接收到的消息,可重新连接的客户机在成功重新连接后返回原因码 MQRC_BACKED_OUT
putMessageOptions
用于控制 put 操作的选项。
如果未指定 putMessageOptions ,那么将使用 MQPutMessageOptons 的缺省实例。
如果在可重新连接的客户机中使用 MQPMO_LOGICAL_ORDER 选项,那么将返回 MQRC_RECONNECT_INCOMPATIBLE 原因码。
public void PutReportMessage(MQMessage message)
public void PutReportMessage(MQMessage message, MQPutMessageOptions putMessageOptions)

抛出 MQException

将报告消息放入队列中,其中 message 是原始消息。

message
包含消息描述符和返回的消息数据。 消息描述符中的某些字段是输入参数。 确保根据需要设置 MessageIdCorrelationId 输入参数非常重要。
对于在 MQGM_SYNCPOINT下接收到的消息,可重新连接的客户机在成功重新连接后返回原因码 MQRC_BACKED_OUT
putMessageOptions
用于控制 put 操作的选项。
如果未指定 putMessageOptions ,那么将使用 MQPutMessageOptons 的缺省实例。
如果在可重新连接的客户机中使用 MQPMO_LOGICAL_ORDER 选项,那么将返回 MQRC_RECONNECT_INCOMPATIBLE 原因码。

构造函数

public MQQueue MQQueueManager.AccessQueue(string queueName, int openOptions);
public MQQueue MQQueueManager.AccessQueue(string queueName, int openOptions, string queueManagerName, string dynamicQueueName, string alternateUserId);

抛出 MQException

访问此队列管理器上的队列。

您可以获取或浏览消息,放置消息,查询队列的属性或设置队列的属性。 如果指定的队列是模型队列,那么将创建动态本地队列。 查询生成的 MQQueue 对象的 name 属性以找出动态队列的名称。

queueName
要打开的队列的名称。
openOptions
用于控制队列打开的选项。
MQC.MQOO_ALTERNATE_USER_AUTHORITY
使用指定的用户标识进行验证。
MQC.MQOO_BIND_AS_QDEF
对队列使用缺省绑定。
MQC.MQOO_BIND_NOT_FIXED
请勿绑定到特定目标。
MQC.MQOO_BIND_ON_OPEN
打开队列时将句柄绑定到目标。
MQC.MQOO_BROWSE
打开以浏览消息。
MQC.MQOO_FAIL_IF_QUIESCING
如果队列管理器正在停顿,那么失败。
MQC.MQOO_INPUT_AS_Q_DEF
打开以使用队列定义的缺省值获取消息。
MQC.MQOO_INPUT_SHARED
打开以获取具有共享访问权的消息。
MQC.MQOO_INPUT_EXCLUSIVE
打开以获取具有独占访问权的消息。
MQC.MQOO_INQUIRE
打开以进行查询-如果要查询属性,那么此选项是必需的。
MQC.MQOO_OUTPUT
打开以放置消息。
MQC.MQOO_PASS_ALL_CONTEXT
允许传递所有上下文。
MQC.MQOO_PASS_IDENTITY_CONTEXT
允许传递身份上下文。
MQC.MQOO_SAVE_ALL_CONTEXT
检索消息时保存上下文。
MQC.MQOO_SET
打开以设置属性-如果要设置属性,那么此选项是必需的。
MQC.MQOO_SET_ALL_CONTEXT
允许设置所有上下文。
MQC.MQOO_SET_IDENTITY_CONTEXT
允许设置身份上下文。
queueManagerName
定义队列的队列管理器的名称。 完全为空白或空的名称表示 MQQueueManager 对象所连接的队列管理器。
dynamicQueueName
除非 queueName 指定模型队列的名称,否则将忽略 dynamicQueueName 。 如果这样做,那么 dynamicQueueName 将指定要创建的动态队列的名称。 如果 queueName 指定模型队列的名称,那么空白或空名称无效。 如果名称中的最后一个非空白字符是星号 *,那么队列管理器会将星号替换为字符串。 这些字符保证为队列生成的名称在此队列管理器上是唯一的。
alternateUserId
如果在 openOptions 参数中指定了 MQC.MQOO_ALTERNATE_USER_AUTHORITY ,那么 alternateUserId 指定用于检查打开权限的备用用户标识。 如果未指定 MQC.MQOO_ALTERNATE_USER_AUTHORITY ,那么 alternateUserId 可以留空或为空。
public MQQueue(MQQueueManager queueManager, string queueName, int openOptions, string queueManagerName, string dynamicQueueName, string alternateUserId);

抛出 MQException

访问 queueManager上的队列。

您可以获取或浏览消息,放置消息,查询队列的属性或设置队列的属性。 如果指定的队列是模型队列,那么将创建动态本地队列。 查询生成的 MQQueue 对象的 name 属性以找出动态队列的名称。

queueManager
要访问队列的队列管理器。
queueName
要打开的队列的名称。
openOptions
用于控制队列打开的选项。
MQC.MQOO_ALTERNATE_USER_AUTHORITY
使用指定的用户标识进行验证。
MQC.MQOO_BIND_AS_QDEF
对队列使用缺省绑定。
MQC.MQOO_BIND_NOT_FIXED
请勿绑定到特定目标。
MQC.MQOO_BIND_ON_OPEN
打开队列时将句柄绑定到目标。
MQC.MQOO_BROWSE
打开以浏览消息。
MQC.MQOO_FAIL_IF_QUIESCING
如果队列管理器正在停顿,那么失败。
MQC.MQOO_INPUT_AS_Q_DEF
打开以使用队列定义的缺省值获取消息。
MQC.MQOO_INPUT_SHARED
打开以获取具有共享访问权的消息。
MQC.MQOO_INPUT_EXCLUSIVE
打开以获取具有独占访问权的消息。
MQC.MQOO_INQUIRE
打开以进行查询-如果要查询属性,那么此选项是必需的。
MQC.MQOO_OUTPUT
打开以放置消息。
MQC.MQOO_PASS_ALL_CONTEXT
允许传递所有上下文。
MQC.MQOO_PASS_IDENTITY_CONTEXT
允许传递身份上下文。
MQC.MQOO_SAVE_ALL_CONTEXT
检索消息时保存上下文。
MQC.MQOO_SET
打开以设置属性-如果要设置属性,那么此选项是必需的。
MQC.MQOO_SET_ALL_CONTEXT
允许设置所有上下文。
MQC.MQOO_SET_IDENTITY_CONTEXT
允许设置身份上下文。
queueManagerName
定义队列的队列管理器的名称。 完全为空白或空的名称表示 MQQueueManager 对象所连接的队列管理器。
dynamicQueueName
除非 queueName 指定模型队列的名称,否则将忽略 dynamicQueueName 。 如果这样做,那么 dynamicQueueName 将指定要创建的动态队列的名称。 如果 queueName 指定模型队列的名称,那么空白或空名称无效。 如果名称中的最后一个非空白字符是星号 *,那么队列管理器会将星号替换为字符串。 这些字符保证为队列生成的名称在此队列管理器上是唯一的。
alternateUserId
如果在 openOptions 参数中指定了 MQC.MQOO_ALTERNATE_USER_AUTHORITY ,那么 alternateUserId 指定用于检查打开权限的备用用户标识。 如果未指定 MQC.MQOO_ALTERNATE_USER_AUTHORITY ,那么 alternateUserId 可以留空或为空。