1

我正在尝试创建一个主题并将消息发布到 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,原因:2085。在执行指定方法期间,另一个组件引发了异常。有关详细信息,请参阅链接的异常。

链接异常原因:2085

链接异常堆栈跟踪:
在 IBM.WMQ.MQQueue..ctor(MQQueueManager qMgr, String queueName, Int32 openOptions, String queueManagerName, String dynamicQueueName, String alternateUserId) 在 IBM.WMQ.MQQueue.Open(MQObjectDescriptor& od) 在 IBM.WMQ。 IBM.WMQ.MQQueueManager.AccessQueue(String queueName, Int32 openOptions) 在 IBM.XMS.Client.WMQ.MqV6Impl.WmqV6Session.SetUpPubSub(Boolean) 的 MQQueueManager.AccessQueue(String queueName, Int32 openOptions, String queueManagerName, String dynamicQueueName, String alternateUserId)开始清理)

4

2 回答 2

2

确保您的SVRCONN频道具有SHARECNV1 或更高的值。

IBM MQ v8 知识中心页面“ MQI 客户端:客户端连接和服务器连接通道的默认行为”记录了以下内容SHARECNV(0)

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

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

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

...

如果 XMSC_WMQ_PROVIDER_VERSION 设置为 UNSPECIFIED 并且 SHARECNV 设置为 0,IBM WebSphere MQ 版本 7.0 的特定功能将被禁用。

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

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

于 2017-07-16T01:12:50.170 回答
0

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

于 2017-07-16T00:18:17.493 回答