CreateTopic

时间:2017-07-15 22:46:58

标签: c# ibm-mq xms

我正在尝试创建主题并向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

     

链接异常堆栈跟踪:
at   IBM.WMQ.MQDestination.Open(MQObjectDescriptor& od)at   IBM.WMQ.MQQueue..ctor(MQQueueManager qMgr,String queueName,Int32   openOptions,String queueManagerName,String dynamicQueueName,String   alternateUserId)在IBM.WMQ.MQQueueManager.AccessQueue(String   queueName,Int32 openOptions,String queueManagerName,String   dynamicQueueName,String alternateUserId)at   IBM.WMQ.MQQueueManager.AccessQueue(String queueName,Int32   openOptions)at   IBM.XMS.Client.WMQ.MqV6Impl.WmqV6Session.SetUpPubSub(布尔   startCleanup)

2 个答案:

答案 0 :(得分:2)

确保您的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 V7.0特定功能   XMSC_WMQ_PROVIDER_VERSION设置为UNSPECIFIED并且SHARECNV设置为   0

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

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

答案 1 :(得分:0)

指定主题目标的语法必须以“topic://”开头。例如typeB。有关详细信息,请参阅文档 here