MQDestination.NET

使用 MQDestination 可访问 MQQueueMQTopic通用的方法。 MQDestination 是抽象基类,无法实例化。

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

属性

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

public DateTime CreationDateTime {get;}

创建队列或主题的日期和时间。 此属性最初包含在 MQQueue中,但已移动到基本 MQDestination 类中。

无缺省值。

public int DestinationType {get;}
用于描述所使用的目标类型的整数值。 从子类构造函数 MQQueueMQTopic初始化,此值可以采用下列其中一个值:
  • MQOT_Q
  • MQOT_TOPIC

无缺省值。

方法

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

抛出 MQException

如果目标是 MQQueue 对象,那么从队列中获取消息; 如果目标是 MQTopic 对象,那么从主题中获取消息,并使用 MQGetMessageOptions 的缺省实例来执行获取。

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

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

消息
包含消息描述符和返回的消息数据。 消息描述符中的某些字段是输入参数。 确保根据需要设置 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

如果目标是 MQQueue 对象,那么将消息放入队列; 如果目标是 MQTopic 对象,那么将消息发布到主题。

完成 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);
消息
包含消息描述符数据和要发送的消息的 MQMessage 对象。 由于此方法,可以更改消息描述符。 在此方法完成之后,消息描述符中的值是已放入队列或已发布到主题的值。

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

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

构造函数

MQDestination 是抽象基类,无法实例化。 使用 MQQueueMQTopic 构造函数或使用 MQQueueManager.AccessQueueMQQueueManager.AccessTopic methods访问目标。