【问题标题】:IBM MQ XMS error 2085 on CreateTopicCreateTopic 上的 IBM MQ XMS 错误 2085
【发布时间】:2017-12-20 18:16:44
【问题描述】:

我正在尝试创建主题并将消息发布到 IBM MQ 主题。我收到 2085 MQ 异常并确定如何解决此问题。
我使用的 IBM.XMS.dll 版本是 8.0.0.6。

控制台应用代码:

    static void Main(string[] args)
    {
        try
        {
            XMSFactoryFactory factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);

            IConnectionFactory connectionFactory = factoryFactory.CreateConnectionFactory();
            Console.WriteLine("Connection Factory created.");

            connectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "MQ_TX_MGR");
            connectionFactory.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, "10.10.10.10(1414)");
            connectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, "CL.SVRCONN");

            connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
            connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT);
            connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, 3); 

            mqConnection = connectionFactory.CreateConnection();
            Console.WriteLine("Connection created.");

            session = mqConnection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
            Console.WriteLine("Session created.");


            IDestination destination = session.CreateTopic("topic://TOPIC/NAME"); // destinationName
            Console.WriteLine("Destination created.");

            // create producer
            IMessageProducer producer = session.CreateProducer(destination);  //My Code is erroring out at this line.

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            Console.WriteLine("Program waiting for message:");
            Console.ReadLine();
        }

    }

异常详情:

错误消息:
CWSMQ0006E:调用期间收到异常 到方法 WmqV6Session.SetupPubSub: CompCode: 2, Reason: 2085。 在执行指定方法期间,由 另一个组件。有关详细信息,请参阅链接的异常。

链接异常原因:2085

链接的异常堆栈跟踪:
at IBM.WMQ.MQDestination.Open(MQObjectDescriptor& od) 在 IBM.WMQ.MQQueue..ctor(MQQueueManager qMgr,字符串 queueName,Int32 openOptions,字符串 queueManagerName,字符串 dynamicQueueName,字符串 AlternateUserId) 在 IBM.WMQ.MQQueueManager.AccessQueue(String queueName,Int32 openOptions,字符串 queueManagerName,字符串 dynamicQueueName, String alternateUserId) 在 IBM.WMQ.MQQueueManager.AccessQueue(字符串 queueName,Int32 打开选项)在 IBM.XMS.Client.WMQ.MqV6Impl.WmqV6Session.SetUpPubSub(布尔 开始清理)

【问题讨论】:

  • IBM.XMS.dll 来自哪个版本的 MQ,您要连接的队列管理器上运行的是哪个版本的 MQ?
  • @JoshMc 客户端和服务器都有 8.0.06
  • 你能在 SVRCONN 通道上查看 SHARECNV 值吗?
  • 能否将 SVRCONN 频道的 SHARECNV 设置的详细信息也添加到问题中。

标签: c# ibm-mq xms


【解决方案1】:

确保您的 SVRCONN 频道的 SHARECNV 值为 1 或更高。

IBM MQ v8 知识中心页面“MQI client: Default behavior of client-connection and server-connection channels”记录了以下关于SHARECNV(0)

此值指定不通过 TCP/IP 套接字共享对话。 通道实例的行为与 6.0 版服务器完全相同 或客户端连接通道,而您不会获得额外的功能 例如设置时可用的双向心跳 SHARECNV 为 1 或更大。 如果您有现有的,请仅使用值 0 将 SHARECNV 设置为时无法正确运行的客户端应用程序 1 或更大。

IBM MQ v8 知识中心页面“XMSC_WMQ_PROVIDER_VERSION”记录了以下内容:

默认情况下,此属性设置为“未指定”。

...

IBM WebSphere MQ 7.0 版的特定功能在以下情况下被禁用 XMSC_WMQ_PROVIDER_VERSION 设置为 UNSPECIFIED 并且 SHARECNV 设置为 0.

这将导致 XMS 尝试使用 STREAM 队列通过排队发布/订阅发布消息。将其设置为 1 或更高以获取 v7 样式连接并使用普通的 v7 集成发布/订阅。

在过去的一些版本中,设置 SHARECNV(0) 可以解决某些问题,我不知道有任何 v8 问题可以解决此问题。

【讨论】:

  • 在我的频道上,Shared conversation 属性设置为 0
  • 这就是问题所在。 SHARECNV(0) 强制使用 v6 类型的连接。这将导致 XMS 尝试使用 STREAM 队列来发布消息。将其设置为 1 或更高。在过去的某些版本中,将其设置为 0 可以解决某些问题,我不知道有任何 v8 问题可以解决此问题。
【解决方案2】:

指定主题目标的语法必须以“topic://”开头。例如session.CreateTopic("topic://Score/Football")。有关详细信息,请参阅文档 here

【讨论】:

  • 2085 表示未知对象。我很惊讶 2085 被抛出一个话题。您能否向我们展示您所做更改的更新代码?
  • 在主要问题中更新了代码:`IDestination destination = session.CreateTopic("topic://TOPIC/NAME"); // 目的地名称
  • 我想我理解这里的问题。不知何故,您的应用程序正在访问排队的 pubsub 代码路径,异常显示对 MQ v6 的引用。有连接工厂属性来设置“提供者版本”。您能否阅读该属性并设置一个值以使用 MQ v7 代码路径?
  • 查看此链接:ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/…。检查您的 Windows GAC 是否安装了任何其他版本的 XMS 和 MQ .net。
  • 我添加了以下属性connectionFactory.SetStringProperty(XMSC.WMQ_PROVIDER_VERSION, "7.0.0.0"); 我收到有关版本未匹配的其他错误。错误:请求的提供程序版本 0 不支持共享对话通道值 7.0.0.0 请求的队列管理器提供程序版本不支持为共享对话通道属性指定的值。 “未指定”的提供程序版本将尝试正常模式连接。
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 2021-11-10
  • 2017-12-18
  • 1970-01-01
  • 2017-01-11
  • 2012-12-07
  • 2018-05-31
  • 2015-05-12
相关资源
最近更新 更多