Example #1
0
        private Task ListenToMq(string queueManagerName, string topicOrQueueString, bool isQueue, MessageReceivedHandler messageHandler, ConnectionStatusChangedHandler connectionStatusChangedHandler)
        {
            var           openOptionsForGet  = MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_MANAGED | MQC.MQSO_NON_DURABLE;
            MQDestination inboundDestination = null;

            var gmo = new MQGetMessageOptions();

            gmo.Options |= MQC.MQGMO_NO_WAIT | MQC.MQGMO_FAIL_IF_QUIESCING;

            try
            {
                var queueManager = new MQQueueManager(queueManagerName, _queueManagerProperties);

                if (isQueue)
                {
                    inboundDestination = queueManager.AccessQueue(topicOrQueueString, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION);
                }
                else
                {
                    inboundDestination = queueManager.AccessTopic(topicOrQueueString, null, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, openOptionsForGet);
                }

                connectionStatusChangedHandler(new ConnectionStatus(queueManagerName, topicOrQueueString, Status.Connected));

                while (true)
                {
                    try
                    {
                        var msg = new MQMessage();
                        inboundDestination.Get(msg, gmo);

                        messageHandler(msg);
                    }
                    catch (MQException mqException)
                    {
                        if (mqException.Reason == MQC.MQRC_NO_MSG_AVAILABLE)
                        {
                            Thread.Sleep(200);
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
            }
            catch (MQException mqException)
            {
                connectionStatusChangedHandler(new ConnectionStatus(queueManagerName, topicOrQueueString, Status.Disconnected));
            }

            return(Task.CompletedTask);
        }
Example #2
0
        private static string GetMessageContent(this MQDestination mqQueue, MQMessage mqMsg, bool browse, bool isFirstMessage)
        {
            var mqGetMsgOpts = new MQGetMessageOptions
            {
                Options = GetMqGetOptions(browse, isFirstMessage)
            };

            mqQueue.Get(mqMsg, mqGetMsgOpts);
            Logger.Info($"Message CCSID: {mqMsg.CharacterSet} ({MqEncoding} expected), Queue:{mqQueue.Name}");
            var messageContent = new byte[0];

            mqMsg.ReadFully(ref messageContent);
            return(OutputEncoding.GetString(messageContent));
        }