MQRC_OBJECT_ALREADY_EXISTS错误代码2100

时间:2014-03-31 06:52:04

标签: c# ibm-mq

我正在使用IBM WebSphere MQ。每当并发用户登录到IBM MQ时,当第二个用户到达并尝试访问getqueue时,他们会收到2100 0x00000834 MQRC_OBJECT_ALREADY_EXISTS错误。请提供一些建议。

连接到MQ Manager:

mqQueueManager = new MQQueueManager(mqQueueManagerName);

打开Put Queue:

mqPutQueue = mqQueueManager.AccessQueue(mqRequestQueueName, MQC.MQOO_INQUIRE |
              MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING);

当第二个用户尝试连接时,打开ReplyTo队列会生成错误。第一个用户的动态队列在断开连接时将被删除。在第一个用户关闭应用程序之前,第二个用户无法连接:

mqGetQueue = mqQueueManager.AccessQueue(mqModelQueueName, MQC.MQOO_INPUT_SHARED ,
   mqQueueManagerName, mqReplyQueueName, "");

1 个答案:

答案 0 :(得分:1)

您可能错误地指定了动态队列名称。

为了向开发人员提供最大的灵活性,WebSphere MQ允许在为动态队列选择所需的确切名称或让WebSphere MQ自动生成唯一名称之间进行选择。如果您希望WebSphere MQ为您生成名称,请确保您传入的名称足够短以允许WMQ追加其他字符,并将星号指定为DynamicQName字段中的最后一个字符。这在名为Creating Dynamic Queues的部分的文档中进行了解释,内容如下:

您可以通过三种方式指定您创建的动态队列的名称:

  • DynamicQName字段中提供所需的全名 MQOD结构。
  • 为。指定前缀(少于33个字符) name,并允许队列管理器生成名称的其余部分。 这意味着队列管理器会生成一个唯一的名称,但是您 仍然有一些控制(例如,您可能希望每个用户使用 某个前缀,或者您可能想要提供特殊安全性 分类到名称中带有特定前缀的队列)。使用 此方法为最后一个非空白字符指定星号(DynamicQName字段。不要为其指定单个星号() 动态队列名称。
  • 允许队列管理器生成完整 名称。要使用此方法,请在第一个中指定星号(*) DynamicQName字段的字符位置。

根据您描述的行为,我猜测您传递给WMQ的名称中没有星号。因此,它假定您要明确指定名称并完全按照您指定的名称进行操作,尽管可能不是您的意图。

要获得您期望的行为,请确保您为mqReplyQueueName传递的值是单个星号(“*”字符),或者是一个少于33个字符的字符串,其结尾为星号。