2

我有一个正在运行的通用“数据泵”是 Windows 服务的一部分;它的一个实例存在于我正在监视的来自 MQSeries 队列的新传入消息的每个队列中。如果 Get 方法失败,我希望能够显示队列的名称,因此我正在尝试构建一个可以在 catch 处理程序中使用的调试变量。我在下面设置 debugQueueInfo 的行上得到了 2068 MQRC_SELECTOR_NOT_FOR_TYPE。

    debugLocation = "queueGetName";
    debugQueueInfo = "Queue:" + queueIn.RemoteQueueManagerName + ":"
                          + queueIn.RemoteQueueName;

    debugLocation = "queueGetMessage";
    queueIn.Get(mqMessage, mqGetMessageOptions);

如何获取当前队列管理器名称和队列名称?变量 queueIn 的类型是 IMB.WMQ.MQQueue,我使用的是 .NET API。

当队列是对象被构建时,我使用了以下内容:

queueOptions = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INQUIRE + MQC.MQOO_BROWSE; 
MQQueue mqQueue = qmgr.AccessQueue(mqCloneSpecs.queueName, queueOptions);

根据 2068 错误代码的文档,我认为添加 MQC.MQOO_BROWSE 可能会解决问题,但事实并非如此。

4

1 回答 1

3

RemoteQueueManagerName 和 RemoteQueueName 仅对远程队列有效。我认为这就是您获得 2068 的原因。MQOO_BROWSE 选项用于获取消息而不将其从队列中删除。

您可以使用Name属性来获取队列名称,例如

debugQueueInfo = "Queue:" + queueIn.Name;

MQQueue类没有获取队列管理器名称的属性。您必须从 MQQueueManager 实例中获取它。

于 2013-03-19T04:24:01.353 回答