Пример #1
0
        public QueueMessage Dequque()
        {
            QueueMessage queueMessage = null;
            MQQueue      destination  = null;

            try
            {
                destination = _mqClient.GetResilientQueue(queueMessage?.QueueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING);
                MQMessage receivedMsg = new MQMessage();
                destination.Get(receivedMsg, _messageGetOptions);
                queueMessage = ToQueueMessage(receivedMsg);
            }
            catch (MQException ex)
            {
                if (ex.ReasonCode == MQC.MQRC_NO_MSG_AVAILABLE)
                {
                    ReportQueueEmpty(ex);
                }
                else
                {
                    _logger.LogError(ex, $"Error getting message from IBM MQ {ex.ToString()} {ex.GetErrorCodeDescription()}");
                    throw;
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error getting message from IBM MQ {ex.ToString()} ");
            }
            finally
            {
                destination?.Close();
                ((IDisposable)destination)?.Dispose();
            }

            return(queueMessage);
        }
        public void Enqueue(QueueMessage queueMessage)
        {
            var       _messagePutOptions = new MQPutMessageOptions();
            MQQueue   destination        = null;
            MQMessage mqMessage          = CreateMQMessage(queueMessage);

            try
            {
                destination = _mqClient.GetResilientQueue(queueMessage.QueueName, MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING);
                destination.Put(mqMessage, _messagePutOptions);
                mqMessage = null;
            }
            catch (MQException ex)
            {
                _logger.LogError(ex, $"Exception occurred while trying to PUT message on IBM MQ: {queueMessage} {ex.Message}");
                throw;
            }
            finally
            {
                destination?.Close();
                ((IDisposable)destination)?.Dispose();
            }
        }