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); }
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)); }