public override void HandleBasicDeliver(string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, IBasicProperties properties, byte[] body) { DataContractKey dataContractKey = properties.GetDataContractKey(); SerializedBusMessage message = _messageHelper.ConstructMessage(dataContractKey, properties, body); try { _monitor(message); } catch (Exception ex) { RawBusMessage raw = new RawBusMessage { Data = message.Data, Namespace = message.Namespace, Name = message.Name, BusId = message.BusId, CorrelationId = message.CorrelationId, Sent = message.Sent }; foreach (var header in message.Headers) { raw.Headers.Add(header); } _errorSubscriber.MessageDispatchException(raw, ex); } }
public void Dispatch(Message message) { MessageSubscribtionInfo messageSubscribtionInfo; RawBusMessage busMessage = Translate(message, out messageSubscribtionInfo); if (busMessage == null) { return; } try { messageSubscribtionInfo.Handler.Dispatch(busMessage); } catch (Exception ex) { _errorSubscriber.MessageDispatchException(busMessage, ex); } }
private void ConsumeMessage(bool redelivered, ulong deliveryTag, IBasicProperties properties, byte[] body) { DataContractKey dataContractKey = properties.GetDataContractKey(); var subscription = _subscriptions.Where(p => p.Value.FilterInfo.ContractKey.Equals(dataContractKey)).Select( pair => new { DataType = pair.Key, pair.Value.Handler }).FirstOrDefault(); if (subscription == null) { RawBusMessage rawBusMessage = _messageHelper.ConstructMessage(dataContractKey, properties, (object)body); _errorSubscriber.UnregisteredMessageArrived(rawBusMessage); return; } object data; if (!_serializers.ContainsKey(properties.ContentType)) { RawBusMessage rawBusMessage = _messageHelper.ConstructMessage(dataContractKey, properties, (object)body); _errorSubscriber.MessageDeserializeException(rawBusMessage, new Exception("Unsupported content type")); return; } try { data = _serializers[properties.ContentType].Deserialize(dataContractKey, subscription.DataType, body); } catch (Exception ex) { RawBusMessage rawBusMessage = _messageHelper.ConstructMessage(dataContractKey, properties, (object)body); _errorSubscriber.MessageDeserializeException(rawBusMessage, ex); return; } RawBusMessage message = _messageHelper.ConstructMessage(dataContractKey, properties, data); if (!_receiveSelfPublish && _busId.Equals(message.BusId)) { _errorSubscriber.MessageFilteredOut(message); return; } try { HandleMessage(subscription.Handler, message, redelivered, deliveryTag); } catch (Exception ex) { _errorSubscriber.MessageDispatchException(message, ex); } }
protected virtual async Task <bool> ConsumeMessage(bool redelivered, ulong deliveryTag, IBasicProperties properties, byte[] body) { DataContractKey dataContractKey = properties.GetDataContractKey(); var subscription = _subscriptions.Where(p => p.Value.FilterInfo.ContractKey.Equals(dataContractKey)).Select( pair => new { DataType = pair.Key, pair.Value.Handler }).FirstOrDefault(); if (subscription == null) { RawBusMessage rawBusMessage = _messageHelper.ConstructMessage(dataContractKey, properties, (object)body); _errorSubscriber.UnregisteredMessageArrived(rawBusMessage); return(false); } object data; if (!_serializers.ContainsKey(properties.ContentType)) { RawBusMessage rawBusMessage = _messageHelper.ConstructMessage(dataContractKey, properties, (object)body); _errorSubscriber.MessageDeserializeException(rawBusMessage, new Exception("Unsupported content type")); return(false); } ISerializer serializer; try { serializer = _serializers[properties.ContentType]; if (dataContractKey.Equals(DataContractKey.BinaryBlob)) { data = body; } else { data = serializer.Deserialize(subscription.DataType, body); } } catch (Exception ex) { RawBusMessage rawBusMessage = _messageHelper.ConstructMessage(dataContractKey, properties, (object)body); _errorSubscriber.MessageDeserializeException(rawBusMessage, ex); return(false); } RawBusMessage message = _messageHelper.ConstructMessage(dataContractKey, properties, data); if (!_receiveSelfPublish && _busId.Equals(message.BusId)) { _errorSubscriber.MessageFilteredOut(message); return(false); } _trace.MessageArrived(_busId, message, ConsumerTag); RawBusMessage reply; try { reply = await HandleMessage(subscription.Handler, message, redelivered, deliveryTag); } catch (RejectMessageException ex) { reply = new RawBusMessage { Data = ex.ReplyData }; reply.Headers.Add(new RejectedHeader()); } catch (Exception ex) { _errorSubscriber.MessageDispatchException(message, ex); reply = new RawBusMessage(); reply.Headers.Add(new ExceptionHeader { Message = ex.Message }); } if (!_neverReply && reply != null && properties.IsReplyToPresent()) { var sendParams = new SendParams { BusId = _busId, Model = Model, CorrelationId = properties.IsCorrelationIdPresent() ? properties.CorrelationId : "", Exchange = _replyExchange, RoutingKey = properties.ReplyTo, MandatoryDelivery = false, PersistentDelivery = false }; _sendHelper.Send(reply, serializer, sendParams); _trace.MessageSent(_busId, reply); } return(true); }