private void Receive(MessageReceiveProperties messageContext)
        {
            using (var channel = connectionProvider.Open(this.ProtocolName, inputAddress, true))
            {
                var consumer = new QueueingBasicConsumer(channel);

                channel.BasicConsume(inputAddress.QueueName, false, consumer);

                var delivery = consumer.Receive(receiveTimeout);
                if (delivery != null)
                {
                    try
                    {
                        log.Debug("Receiving from " + inputAddress);
                        DeliverMessage(channel, messageContext, delivery);
                    }
                    catch (AbortHandlingCurrentMessageException)
                    {
                        return;
                    }
                    catch
                    {
                        //IncrementFailuresForMessage(messageContext.MessageId);
                        MoveToPoison(delivery);
                        OnFailedMessageProcessing();
                        channel.BasicAck(delivery.DeliveryTag, false);
                    }
                }
            }
        }
        private void Process()
        {
            messageContext = new MessageReceiveProperties();
            var wrapper = new TransactionWrapper();

            wrapper.RunInTransaction(() => Receive(messageContext), isolationLevel, transactionTimeout);
            ClearFailuresForMessage(messageContext.MessageId);
            messageContext = null;
        }
示例#3
0
        private void Receive(MessageReceiveProperties messageContext)
        {
            using (var connection = connectionProvider.Open(this.ProtocolName, inputAddress.Broker, true))
            {
                var channel  = connection.Model();
                var consumer = new QueueingBasicConsumer(channel);

                channel.BasicConsume(inputAddress.QueueName, SendAcknowledgement, consumer);

                var delivery = consumer.Receive(receiveTimeout);
                if (delivery != null)
                {
                    log.Debug("Receiving from " + inputAddress);
                    DeliverMessage(channel, messageContext, delivery);
                }
            }
        }
示例#4
0
 private void Process()
 {
     messageContext = new MessageReceiveProperties();
     try
     {
         var wrapper = new TransactionWrapper();
         wrapper.RunInTransaction(() => Receive(messageContext), isolationLevel, transactionTimeout);
         ClearFailuresForMessage(messageContext.MessageId);
     }
     catch (AbortHandlingCurrentMessageException)
     {
     }
     catch (Exception error)
     {
         log.Error(error);
         IncrementFailuresForMessage(messageContext.MessageId);
         OnFailedMessageProcessing(error);
     }
     finally
     {
         messageContext = null;
     }
 }
        private void DeliverMessage(IModel channel, MessageReceiveProperties messageContext, BasicDeliverEventArgs delivery)
        {
            messageContext.MessageId = delivery.ConsumerTag;

            //problems with message id
            //if (HandledMaximumRetries(messageContext.MessageId))
            //{
            //    MoveToPoison(delivery);
            //    channel.BasicAck(delivery.DeliveryTag, false);
            //    return;
            //}

            if (StartedMessageProcessing != null)
            {
                StartedMessageProcessing(this, null);
            }

            var m = new TransportMessage();

            try
            {
                using (var stream = new MemoryStream(delivery.Body))
                {
                    m.Body = this.MessageSerializer.Deserialize(stream);
                }
            }
            catch (Exception deserializeError)
            {
                log.Error("Could not extract message data.", deserializeError);
                MoveToPoison(delivery);
                OnFinishedMessageProcessing();
                channel.BasicAck(delivery.DeliveryTag, false);
                return;
            }

            m.Id               = delivery.BasicProperties.MessageId;
            m.CorrelationId    = delivery.BasicProperties.CorrelationId;
            m.IdForCorrelation = delivery.BasicProperties.MessageId;
            m.ReturnAddress    = delivery.BasicProperties.ReplyTo;
            m.TimeSent         = delivery.BasicProperties.Timestamp.ToDateTime();
            m.Headers          = m.Headers ?? new List <HeaderInfo>();

            if (delivery.BasicProperties.Headers != null && delivery.BasicProperties.Headers.Count > 0)
            {
                foreach (DictionaryEntry entry in delivery.BasicProperties.Headers)
                {
                    var value       = entry.Value;
                    var valueString = value != null?value.ToString() : null;

                    m.Headers.Add(
                        new HeaderInfo
                    {
                        Key   = entry.Key.ToString(),
                        Value = valueString
                    });
                }
            }

            m.Recoverable = delivery.BasicProperties.DeliveryMode == 2;
            var noErrorReceiving = OnTransportMessageReceived(m);
            var noErrorFinishing = OnFinishedMessageProcessing();

            if (messageContext.NeedToAbort)
            {
                throw new AbortHandlingCurrentMessageException();
            }

            if (!(noErrorReceiving && noErrorFinishing))
            {
                throw new MessageHandlingException("Exception occured while processing message.");
            }

            channel.BasicAck(delivery.DeliveryTag, false);
        }
        private void Receive(MessageReceiveProperties messageContext)
        {
            using (var channel = connectionProvider.Open(this.ProtocolName, inputAddress, true))
            {
                var consumer = new QueueingBasicConsumer(channel);

                channel.BasicConsume(inputAddress.QueueName, false, consumer);

                var delivery = consumer.Receive(receiveTimeout);
                if (delivery != null)
                {
                    try
                    {
                        log.Debug("Receiving from " + inputAddress);
                        DeliverMessage(channel, messageContext, delivery);
                    }
                    catch (AbortHandlingCurrentMessageException)
                    {
                        return;
                    }
                    catch
                    {
                        //IncrementFailuresForMessage(messageContext.MessageId);
                        MoveToPoison(delivery);
                        OnFailedMessageProcessing();
                        channel.BasicAck(delivery.DeliveryTag, false);
                    }
                }
            }
        }
 private void Process()
 {
     messageContext = new MessageReceiveProperties();
     var wrapper = new TransactionWrapper();
     wrapper.RunInTransaction(() => Receive(messageContext), isolationLevel, transactionTimeout);
     ClearFailuresForMessage(messageContext.MessageId);
     messageContext = null;
 }
        private void DeliverMessage(IModel channel, MessageReceiveProperties messageContext, BasicDeliverEventArgs delivery)
        {
            messageContext.MessageId = delivery.ConsumerTag;

            //problems with message id
            //if (HandledMaximumRetries(messageContext.MessageId))
            //{
            //    MoveToPoison(delivery);
            //    channel.BasicAck(delivery.DeliveryTag, false);
            //    return;
            //}

            if (StartedMessageProcessing != null)
                StartedMessageProcessing(this, null);

            var m = new TransportMessage();
            try
            {
                using (var stream = new MemoryStream(delivery.Body))
                {
                    m.Body = this.MessageSerializer.Deserialize(stream);
                }
            }
            catch (Exception deserializeError)
            {
                log.Error("Could not extract message data.", deserializeError);
                MoveToPoison(delivery);
                OnFinishedMessageProcessing();
                channel.BasicAck(delivery.DeliveryTag, false);
                return;
            }

            m.Id = delivery.BasicProperties.MessageId;
            m.CorrelationId = delivery.BasicProperties.CorrelationId;
            m.IdForCorrelation = delivery.BasicProperties.MessageId;
            m.ReturnAddress = delivery.BasicProperties.ReplyTo;
            m.TimeSent = delivery.BasicProperties.Timestamp.ToDateTime();
            m.Headers = m.Headers ?? new List<HeaderInfo>();

            if (delivery.BasicProperties.Headers != null && delivery.BasicProperties.Headers.Count > 0)
            {
                foreach (DictionaryEntry entry in delivery.BasicProperties.Headers)
                {
                    var value = entry.Value;
                    var valueString = value != null ? value.ToString() : null;

                    m.Headers.Add(
                        new HeaderInfo
                        {
                            Key = entry.Key.ToString(),
                            Value = valueString
                        });
                }
            }

            m.Recoverable = delivery.BasicProperties.DeliveryMode == 2;
            var noErrorReceiving = OnTransportMessageReceived(m);
            var noErrorFinishing = OnFinishedMessageProcessing();

            if (messageContext.NeedToAbort)
                throw new AbortHandlingCurrentMessageException();

            if (!(noErrorReceiving && noErrorFinishing))
                throw new MessageHandlingException("Exception occured while processing message.");

            channel.BasicAck(delivery.DeliveryTag, false);
        }
示例#9
0
    void DeliverMessage(IModel channel, MessageReceiveProperties messageContext, BasicDeliverEventArgs delivery)
    {
      messageContext.MessageId = delivery.BasicProperties.MessageId;
      if (HandledMaximumRetries(messageContext.MessageId))
      {
        MoveToPoison(delivery);
        channel.BasicAck(delivery.DeliveryTag, false);
        return;
      }

      var startedProcessingError = OnStartedMessageProcessing();
      if (startedProcessingError != null)
      {
        throw new MessageHandlingException("Exception occured while starting to process message.", startedProcessingError, null, null);
      }

      var m = new TransportMessage();
      try
      {
        using (var stream = new MemoryStream(delivery.Body))
        {
          m.Body = this.MessageSerializer.Deserialize(stream);
        }
      }
      catch (Exception deserializeError)
      {
        _log.Error("Could not extract message data.", deserializeError);
        MoveToPoison(delivery);
        OnFinishedMessageProcessing();
        return;
      }
      m.Id = delivery.BasicProperties.MessageId;
      m.CorrelationId = delivery.BasicProperties.CorrelationId;
      m.IdForCorrelation = delivery.BasicProperties.MessageId;
      m.ReturnAddress = delivery.BasicProperties.ReplyTo;
      m.TimeSent = delivery.BasicProperties.Timestamp.ToDateTime();
      if (delivery.BasicProperties.Headers != null && delivery.BasicProperties.Headers.Contains("NSB"))
      {
        var headers = (byte[])delivery.BasicProperties.Headers["NSB"];
        m.Headers = _headersSerializer.Deserialize(headers).ToList();
      }
      else
      {
        m.Headers = new List<HeaderInfo>();
      }
      m.Recoverable = delivery.BasicProperties.DeliveryMode == 2;
      var receivingError = OnTransportMessageReceived(m);
      var finishedProcessingError = OnFinishedMessageProcessing();
      if (messageContext.NeedToAbort)
      {
        throw new AbortHandlingCurrentMessageException();
      }
      if (receivingError != null || finishedProcessingError != null)
      {
        throw new MessageHandlingException("Exception occured while processing message.", null, receivingError, finishedProcessingError);
      }
      channel.BasicAck(delivery.DeliveryTag, false);
    }
示例#10
0
 void Receive(MessageReceiveProperties messageContext)
 {
   _log.Debug("Receiving from " + _listenAddress);
   using (var connection = _connectionProvider.Open(this.ProtocolName, _listenAddress.Broker, true))
   {
     var channel = connection.Model();
     var consumer = new QueueingBasicConsumer(channel);
     channel.BasicConsume(_listenAddress.RoutingKey, false, null, consumer);
     var delivery = consumer.Receive(_receiveTimeout);
     if (delivery != null)
     {
       DeliverMessage(channel, messageContext, delivery);
     }
   }
 }
示例#11
0
 void Process()
 {
   _messageContext = new MessageReceiveProperties();
   try
   {
     var wrapper = new TransactionWrapper();
     wrapper.RunInTransaction(() => Receive(_messageContext), _isolationLevel, _transactionTimeout);
     ClearFailuresForMessage(_messageContext.MessageId);
   }
   catch (AbortHandlingCurrentMessageException)
   {
   }
   catch (Exception error)
   {
     _log.Error(error);
     IncrementFailuresForMessage(_messageContext.MessageId);
     OnFailedMessageProcessing(error);
   }
   finally
   {
     _messageContext = null;
   }
 }
        private void Receive(MessageReceiveProperties messageContext)
        {
            using (var connection = connectionProvider.Open(this.ProtocolName, inputAddress.Broker, true))
            {
                var channel = connection.Model();
                var consumer = new QueueingBasicConsumer(channel);

                channel.BasicConsume(inputAddress.QueueName, SendAcknowledgement, consumer);

                var delivery = consumer.Receive(receiveTimeout);
                if (delivery != null)
                {
                    log.Debug("Receiving from " + inputAddress);
                    DeliverMessage(channel, messageContext, delivery);
                }
            }
        }