public void CopyFrom(IBasicProperties basicProperties) { Preconditions.CheckNotNull(basicProperties, "basicProperties"); if (basicProperties.IsContentTypePresent()) ContentType = basicProperties.ContentType; if (basicProperties.IsContentEncodingPresent()) ContentEncoding = basicProperties.ContentEncoding; if (basicProperties.IsDeliveryModePresent()) DeliveryMode = basicProperties.DeliveryMode; if (basicProperties.IsPriorityPresent()) Priority = basicProperties.Priority; if (basicProperties.IsCorrelationIdPresent()) CorrelationId = basicProperties.CorrelationId; if (basicProperties.IsReplyToPresent()) ReplyTo = basicProperties.ReplyTo; if (basicProperties.IsExpirationPresent()) Expiration = basicProperties.Expiration; if (basicProperties.IsMessageIdPresent()) MessageId = basicProperties.MessageId; if (basicProperties.IsTimestampPresent()) Timestamp = basicProperties.Timestamp.UnixTime; if (basicProperties.IsTypePresent()) Type = basicProperties.Type; if (basicProperties.IsUserIdPresent()) UserId = basicProperties.UserId; if (basicProperties.IsAppIdPresent()) AppId = basicProperties.AppId; if (basicProperties.IsClusterIdPresent()) ClusterId = basicProperties.ClusterId; if (basicProperties.IsHeadersPresent()) { foreach (var header in basicProperties.Headers) { Headers.Add(header.Key, header.Value); } } }
public override async Task HandleBasicDeliver(String consumerTag, UInt64 deliveryTag, Boolean redelivered, String exchange, String routingKey, IBasicProperties properties, Byte[] body) { var app = _server._application; var path = String.Empty; if (properties.Headers.TryGetValue("path", out var pathObj)) { path = Encoding.UTF8.GetString((Byte[])pathObj); if (!path.StartsWith("/")) { path = "/" + path; } } var requestFeature = new HttpRequestFeature { Body = new MemoryStream(body, writable: false), Method = "GET", Protocol = "http", Path = path, Scheme = "http", }; var responseBodyStream = new MemoryStream(); var responseFeature = new HttpResponseFeature { Body = responseBodyStream, }; var features = new FeatureCollection(_server._features); features.Set <IHttpRequestFeature>(requestFeature); features.Set <IHttpResponseFeature>(responseFeature); var context = app.CreateContext(features); await app.ProcessRequestAsync(context); if (properties.IsReplyToPresent() && properties.ReplyToAddress != null) { var responseBody = responseBodyStream.ToArray(); var props = Model.CreateBasicProperties(); if (props.Headers == null) { props.Headers = new Dictionary <String, Object>(); } foreach (var header in responseFeature.Headers) { props.Headers.Add(header.Key, Encoding.UTF8.GetBytes(header.Value)); } Model.BasicPublish(properties.ReplyToAddress, props, responseBody); } Model.BasicAck(deliveryTag, multiple: false); app.DisposeContext(context, null); }
private HeaderResult <string> ReadReplyTo(IBasicProperties basicProperties) { if (basicProperties.IsReplyToPresent()) { return(new HeaderResult <string>(basicProperties.ReplyTo, true)); } return(new HeaderResult <string>(null, true)); }
internal static ReceivedMessage CreateFromEvent(BasicDeliverEventArgs eventArgs) { if (eventArgs == null) { return(null); } IBasicProperties properties = eventArgs.BasicProperties; ReceivedMessage message = null; switch (properties?.ContentType?.ToLower()) { case ContentTypes.JSON: message = new JSONReceivedMessage(); break; case ContentTypes.Binary: message = new BinaryReceivedMessage(); break; default: message = new ReceivedMessage(); break; } message.DeliveryTag = eventArgs.DeliveryTag; message.Exchange = eventArgs.Exchange; message.RoutingKey = eventArgs.RoutingKey; message.Redelivered = eventArgs.Redelivered; message.ContentType = (properties?.IsContentTypePresent() ?? false) ? properties.ContentType : null; message.ContentEncoding = (properties?.IsContentEncodingPresent() ?? false) ? properties.ContentEncoding : null; message.ExpandBody(eventArgs.Body); if (properties == null) { return(message); } message.Type = properties.IsTypePresent() ? properties.Type : null; message.Persistent = properties.IsDeliveryModePresent() && properties.Persistent; message.ApplicationName = properties.IsAppIdPresent() ? properties.AppId : null; message.ReplyToQueueName = properties.IsReplyToPresent() ? properties.ReplyTo : null; if (properties.IsMessageIdPresent() && Guid.TryParse(properties.MessageId, out Guid messageId)) { message.MessageID = messageId; } if (properties.IsCorrelationIdPresent() && Guid.TryParse(properties.CorrelationId, out Guid correlationId)) { message.CorrelationID = correlationId; } return(message); }
public MessageBasicProperties(IBasicProperties basicProperties) : this() { ContentTypePresent = basicProperties.IsContentTypePresent(); ContentEncodingPresent = basicProperties.IsContentEncodingPresent(); HeadersPresent = basicProperties.IsHeadersPresent(); DeliveryModePresent = basicProperties.IsDeliveryModePresent(); PriorityPresent = basicProperties.IsPriorityPresent(); CorrelationIdPresent = basicProperties.IsCorrelationIdPresent(); ReplyToPresent = basicProperties.IsReplyToPresent(); ExpirationPresent = basicProperties.IsExpirationPresent(); MessageIdPresent = basicProperties.IsMessageIdPresent(); TimestampPresent = basicProperties.IsTimestampPresent(); TypePresent = basicProperties.IsTypePresent(); UserIdPresent = basicProperties.IsUserIdPresent(); AppIdPresent = basicProperties.IsAppIdPresent(); ClusterIdPresent = basicProperties.IsClusterIdPresent(); ContentType = basicProperties.ContentType; ContentEncoding = basicProperties.ContentEncoding; DeliveryMode = basicProperties.DeliveryMode; Priority = basicProperties.Priority; CorrelationId = basicProperties.CorrelationId; ReplyTo = basicProperties.ReplyTo; Expiration = basicProperties.Expiration; MessageId = basicProperties.MessageId; Timestamp = basicProperties.Timestamp.UnixTime; Type = basicProperties.Type; UserId = basicProperties.UserId; AppId = basicProperties.AppId; ClusterId = basicProperties.ClusterId; if(basicProperties.IsHeadersPresent()) { foreach (DictionaryEntry header in basicProperties.Headers) { Headers.Add(header.Key, header.Value); } } }
public void CopyFrom(IBasicProperties basicProperties) { ContentTypePresent = basicProperties.IsContentTypePresent(); ContentEncodingPresent = basicProperties.IsContentEncodingPresent(); HeadersPresent = basicProperties.IsHeadersPresent(); DeliveryModePresent = basicProperties.IsDeliveryModePresent(); PriorityPresent = basicProperties.IsPriorityPresent(); CorrelationIdPresent = basicProperties.IsCorrelationIdPresent(); ReplyToPresent = basicProperties.IsReplyToPresent(); ExpirationPresent = basicProperties.IsExpirationPresent(); MessageIdPresent = basicProperties.IsMessageIdPresent(); TimestampPresent = basicProperties.IsTimestampPresent(); TypePresent = basicProperties.IsTypePresent(); UserIdPresent = basicProperties.IsUserIdPresent(); AppIdPresent = basicProperties.IsAppIdPresent(); ClusterIdPresent = basicProperties.IsClusterIdPresent(); ContentType = basicProperties.ContentType; ContentEncoding = basicProperties.ContentEncoding; DeliveryMode = basicProperties.DeliveryMode; Priority = basicProperties.Priority; CorrelationId = basicProperties.CorrelationId; ReplyTo = basicProperties.ReplyTo; Expiration = basicProperties.Expiration; MessageId = basicProperties.MessageId; Timestamp = basicProperties.Timestamp.UnixTime; Type = basicProperties.Type; UserId = basicProperties.UserId; AppId = basicProperties.AppId; ClusterId = basicProperties.ClusterId; if (basicProperties.IsHeadersPresent()) { foreach (DictionaryEntry header in basicProperties.Headers) { Headers.Add(header.Key, header.Value); } } }
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]; data = serializer.Deserialize(dataContractKey, 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()) { _sendHelper.Send(new SendParams { BusId = _busId, BusMessage = reply, Model = Model, CorrelationId = properties.IsCorrelationIdPresent() ? properties.CorrelationId : "", Exchange = _replyExchange, RoutingKey = properties.ReplyTo, Serializer = serializer, MandatoryDelivery = false, PersistentDelivery = false }); _trace.MessageSent(_busId, reply); } return true; }
public static void CopyTo(this IBasicProperties basicProperties, MessageProperties messageProperties) { if (basicProperties.IsContentTypePresent()) { messageProperties.ContentType = basicProperties.ContentType; } if (basicProperties.IsContentEncodingPresent()) { messageProperties.ContentEncoding = basicProperties.ContentEncoding; } if (basicProperties.IsDeliveryModePresent()) { messageProperties.DeliveryMode = basicProperties.DeliveryMode; } if (basicProperties.IsPriorityPresent()) { messageProperties.Priority = basicProperties.Priority; } if (basicProperties.IsCorrelationIdPresent()) { messageProperties.CorrelationId = basicProperties.CorrelationId; } if (basicProperties.IsReplyToPresent()) { messageProperties.ReplyTo = basicProperties.ReplyTo; } if (basicProperties.IsExpirationPresent()) { messageProperties.Expiration = basicProperties.Expiration; } if (basicProperties.IsMessageIdPresent()) { messageProperties.MessageId = basicProperties.MessageId; } if (basicProperties.IsTimestampPresent()) { messageProperties.Timestamp = basicProperties.Timestamp.UnixTime; } if (basicProperties.IsTypePresent()) { messageProperties.Type = basicProperties.Type; } if (basicProperties.IsUserIdPresent()) { messageProperties.UserId = basicProperties.UserId; } if (basicProperties.IsAppIdPresent()) { messageProperties.AppId = basicProperties.AppId; } if (basicProperties.IsClusterIdPresent()) { messageProperties.ClusterId = basicProperties.ClusterId; } if (basicProperties.IsHeadersPresent()) { foreach (DictionaryEntry header in basicProperties.Headers) { messageProperties.Headers.Add(header.Key, header.Value); } } }
/// <summary> /// Copies IBasicProperties to MessageProperties /// </summary> public void CopyFrom(IBasicProperties basicProperties) { Preconditions.CheckNotNull(basicProperties, "basicProperties"); if (basicProperties.IsContentTypePresent()) { ContentType = basicProperties.ContentType; } if (basicProperties.IsContentEncodingPresent()) { ContentEncoding = basicProperties.ContentEncoding; } if (basicProperties.IsDeliveryModePresent()) { DeliveryMode = basicProperties.DeliveryMode; } if (basicProperties.IsPriorityPresent()) { Priority = basicProperties.Priority; } if (basicProperties.IsCorrelationIdPresent()) { CorrelationId = basicProperties.CorrelationId; } if (basicProperties.IsReplyToPresent()) { ReplyTo = basicProperties.ReplyTo; } if (basicProperties.IsExpirationPresent()) { Expiration = basicProperties.Expiration; } if (basicProperties.IsMessageIdPresent()) { MessageId = basicProperties.MessageId; } if (basicProperties.IsTimestampPresent()) { Timestamp = basicProperties.Timestamp.UnixTime; } if (basicProperties.IsTypePresent()) { Type = basicProperties.Type; } if (basicProperties.IsUserIdPresent()) { UserId = basicProperties.UserId; } if (basicProperties.IsAppIdPresent()) { AppId = basicProperties.AppId; } if (basicProperties.IsClusterIdPresent()) { ClusterId = basicProperties.ClusterId; } if (basicProperties.IsHeadersPresent()) { Headers = basicProperties.Headers == null || basicProperties.Headers.Count == 0 ? null : new Dictionary <string, object>(basicProperties.Headers); } }
public bool CanRespond() { return(_basicProperties.IsReplyToPresent()); }
public void CopyFrom(IBasicProperties basicProperties) { GuardHelper.ArgumentNotNull(() => basicProperties); if (basicProperties.IsContentTypePresent()) { ContentType = basicProperties.ContentType; } if (basicProperties.IsContentEncodingPresent()) { ContentEncoding = basicProperties.ContentEncoding; } if (basicProperties.IsDeliveryModePresent()) { DeliveryMode = basicProperties.DeliveryMode; } if (basicProperties.IsPriorityPresent()) { Priority = basicProperties.Priority; } if (basicProperties.IsCorrelationIdPresent()) { CorrelationId = basicProperties.CorrelationId; } if (basicProperties.IsReplyToPresent()) { ReplyTo = basicProperties.ReplyTo; } if (basicProperties.IsExpirationPresent()) { Expiration = basicProperties.Expiration; } if (basicProperties.IsMessageIdPresent()) { MessageId = basicProperties.MessageId; } if (basicProperties.IsTimestampPresent()) { Timestamp = basicProperties.Timestamp.UnixTime; } if (basicProperties.IsTypePresent()) { Type = basicProperties.Type; } if (basicProperties.IsUserIdPresent()) { UserId = basicProperties.UserId; } if (basicProperties.IsAppIdPresent()) { AppId = basicProperties.AppId; } if (basicProperties.IsClusterIdPresent()) { ClusterId = basicProperties.ClusterId; } if (basicProperties.IsHeadersPresent()) { foreach (var header in basicProperties.Headers) { Headers.Add(header.Key, header.Value); } } }
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); }
/// <summary> /// Converts IBasicProperties to a string /// </summary> /// <param name="extendedObject">objected being extended</param> /// <returns>formatted string of IBasicProperties</returns> public static string ToFormatString(this IBasicProperties extendedObject) { Arguments.NotNull(extendedObject, nameof(extendedObject)); var sb = new StringBuilder(); if (extendedObject.IsAppIdPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "AppID:{0} ", extendedObject.AppId); } if (extendedObject.IsClusterIdPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "ClusterId:{0} ", extendedObject.ClusterId); } if (extendedObject.IsContentEncodingPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "ContentEncoding:{0} ", extendedObject.ContentEncoding); } if (extendedObject.IsContentTypePresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "ContentType:{0} ", extendedObject.ContentType); } if (extendedObject.IsCorrelationIdPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "CorrelationId:{0} ", extendedObject.CorrelationId); } if (extendedObject.IsDeliveryModePresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "DeliveryMode:{0} ", extendedObject.DeliveryMode); } if (extendedObject.IsExpirationPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "Expiration:{0} ", extendedObject.Expiration); } if (extendedObject.IsHeadersPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "Headers:{0} ", extendedObject.Headers.StringFormat()); } if (extendedObject.IsMessageIdPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "MessageId:{0} ", extendedObject.MessageId); } if (extendedObject.IsPriorityPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "Priority:{0} ", extendedObject.Priority); } if (extendedObject.IsReplyToPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "ReplyTo:{0} ", extendedObject.ReplyTo); } if (extendedObject.IsTimestampPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "Timestamp:{0} ", extendedObject.Timestamp); } if (extendedObject.IsTypePresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "Type:{0} ", extendedObject.Type); } if (extendedObject.IsUserIdPresent()) { sb.AppendFormat(CultureInfo.InvariantCulture, "UserId:{0} ", extendedObject.UserId); } return(sb.ToString()); }
internal void CopyFrom(IBasicProperties from) { if (from == null) throw new ArgumentNullException(nameof(from)); if (from.IsAppIdPresent()) AppId = from.AppId; if (from.IsClusterIdPresent()) ClusterId = from.ClusterId; if (from.IsContentEncodingPresent()) ContentEncoding = from.ContentEncoding; if (from.IsContentTypePresent()) ContentType = from.ContentType; if (from.IsCorrelationIdPresent()) CorrelationId = from.CorrelationId; if (from.IsDeliveryModePresent()) DeliveryMode = (LinkMessageDeliveryMode) from.DeliveryMode; if (from.IsReplyToPresent()) ReplyTo = from.ReplyTo; if (from.IsExpirationPresent()) Expiration = TimeSpan.FromMilliseconds(int.Parse(from.Expiration)); if (from.IsMessageIdPresent()) MessageId = from.MessageId; if (from.IsTimestampPresent()) TimeStamp = from.Timestamp.UnixTime; if (from.IsTypePresent()) Type = from.Type; if (from.IsUserIdPresent()) UserId = from.UserId; if (from.IsPriorityPresent()) Priority = from.Priority; if (from.IsHeadersPresent()) { foreach (var header in from.Headers) { Headers[header.Key] = header.Value; } } }
public EasyNetQMessageProperties(IBasicProperties basicProperties) : this() { if (basicProperties.IsContentTypePresent()) { ContentType = basicProperties.ContentType; } if (basicProperties.IsContentEncodingPresent()) { ContentEncoding = basicProperties.ContentEncoding; } if (basicProperties.IsDeliveryModePresent()) { DeliveryMode = basicProperties.DeliveryMode; } if (basicProperties.IsPriorityPresent()) { Priority = basicProperties.Priority; } if (basicProperties.IsCorrelationIdPresent()) { CorrelationId = basicProperties.CorrelationId; } if (basicProperties.IsReplyToPresent()) { ReplyTo = basicProperties.ReplyTo; } if (basicProperties.IsExpirationPresent()) { Expiration = basicProperties.Expiration; } if (basicProperties.IsMessageIdPresent()) { MessageId = basicProperties.MessageId; } if (basicProperties.IsTimestampPresent()) { Timestamp = basicProperties.Timestamp.UnixTime; } if (basicProperties.IsTypePresent()) { Type = basicProperties.Type; } if (basicProperties.IsUserIdPresent()) { UserId = basicProperties.UserId; } if (basicProperties.IsAppIdPresent()) { AppId = basicProperties.AppId; } if (basicProperties.IsClusterIdPresent()) { ClusterId = basicProperties.ClusterId; } if (!basicProperties.IsHeadersPresent()) { return; } foreach (var(key, value) in basicProperties.Headers) { Headers.Add(key, (byte[])value); } }