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