MQ PubSub - пример чтения IBM MQ PubSub из. Net - PullRequest
0 голосов
/ 24 января 2020

Мне нужно создать новое приложение. net (предпочтительно ядро), которое может читать сообщения подписки IBM MQ. Я не могу найти документацию онлайн, как это сделать. На веб-сайте IBM говорится, что он содержит пример класса о том, как это сделать (MQPubSubSample.cs), который поставляется с продуктом MQ. У меня нет прямого доступа к продукту (другой отдел в компании), поэтому у кого-нибудь есть пример, как это сделать, или есть доступ к образцу класса IBM MQPubSubSample.cs?

1 Ответ

0 голосов
/ 24 января 2020

Вам понадобится как минимум MQ Redistributable Client и менеджер очередей, работающий где-нибудь для запуска приложения.

Вот пример, который делает то, что вы ищете.

    void GetMessagesFromSub()
    {
    MQQueueManager queueManager;
    MQTopic topic;
    Hashtable properties;
    MQMessage message;
        try
        {
            // mq properties
            properties = new Hashtable();
            properties.Add(MQC.HOST_NAME_PROPERTY, "localhost");
            properties.Add(MQC.PORT_PROPERTY, 1414);
            properties.Add(MQC.CHANNEL_PROPERTY, "SVRCON_CHN");
            properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
            properties.Add(MQC.USER_ID_PROPERTY, "myuserid");
            properties.Add(MQC.PASSWORD_PROPERTY, "mylongpassw0rdisthis");

            // create connection
            Console.Write("Connecting to queue manager.. ");
            queueManager = new MQQueueManager("MFTQM", properties);

            // Subscribe to topic - non durable subscription
            String subTopicString = "/SPORTS/FOOTBALL/#";
            Console.Write("Subscribing to topic " + subTopicString);
            topic = queueManager.AccessTopic(subTopicString, null, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING);
            // This one creates durable subscription
            //topic = queueManager.AccessTopic(topicName, null, MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_DURABLE | MQC.MQSO_RESUME, null, "DurableSubscriptionName");

                // creating a message object
                message = new MQMessage();
            MQGetMessageOptions mqgmo = new MQGetMessageOptions();
            mqgmo.WaitInterval = 30000;
            mqgmo.Options |= MQC.MQGMO_WAIT;

                try
                {
                    topic.Get(message, mqgmo);
                    Console.WriteLine("Message " + message.ReadString(message.MessageLength));
                    message.ClearMessage();
                }
                catch (MQException mqe)
                {
                    if (mqe.ReasonCode == 2033)
                    {
                            Console.WriteLine("Timeout : No message available");
                    }
                    else
                    {
                        Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
                    }
                }

            // closing topic
            topic.Close();

            // disconnecting queue manager
            queueManager.Disconnect();
        }
        catch (MQException mqe)
        {
            Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
            Console.WriteLine(mqe.StackTrace);
        }
    }
...