/// <summary>
        /// Asynchronously sends the specified message.
        /// </summary>
        /// <param name="message">The message to send.</param>
        public Task SendAsync(ISenderMessage message)
        {
            var shouldCompress = message.ShouldCompress(_compressed);

            var stringValue = message.StringValue;

            if (shouldCompress)
            {
                stringValue = MessageCompression.Compress(stringValue);
            }

            var sendMessageRequest = new SendMessageRequest(_queueUrl, stringValue);

            var originatingSystemAlreadyExists = false;

            if (message.Headers != null)
            {
                foreach (var header in message.Headers)
                {
                    if (header.Key == HeaderName.OriginatingSystem)
                    {
                        originatingSystemAlreadyExists = true;
                    }

                    sendMessageRequest.MessageAttributes.Add(
                        header.Key,
                        new MessageAttributeValue {
                        StringValue = header.Value, DataType = "String"
                    });
                }
            }

            sendMessageRequest.MessageAttributes[HeaderName.MessageFormat] =
                new MessageAttributeValue {
                StringValue = message.MessageFormat.ToString(), DataType = "String"
            };

            if (!originatingSystemAlreadyExists)
            {
                sendMessageRequest.MessageAttributes[HeaderName.OriginatingSystem] =
                    new MessageAttributeValue {
                    StringValue = "SQS", DataType = "String"
                };
            }

            if (shouldCompress)
            {
                sendMessageRequest.MessageAttributes[HeaderName.CompressedPayload] =
                    new MessageAttributeValue {
                    StringValue = "true", DataType = "String"
                };
            }

            return(_sqs.SendMessageAsync(sendMessageRequest));
        }
Example #2
0
 public Task SendAsync(ISenderMessage message)
 {
     return(Task.Run(delegate
     {
         using (var model = _connection.CreateModel())
         {
             var props = model.CreateBasicProperties();
             props.Headers = message.Headers.ToDictionary <KeyValuePair <string, string>, string, object>(kvp => kvp.Key, kvp => kvp.Value); // IEnum<KVP<S,S>> in, Dictionary<string, object> out.
             props.ContentType = message.MessageFormat.ToString();
             props.Priority = message.Priority > highestPriority ? highestPriority : (message.Priority ?? 0);
             // props.ContentEncoding = new NotImplementedException(); // TODO: add this to Rock.Messaging?
             model.BasicPublish(_exchange, _routingKey, props, message.BinaryValue);
         }
     }));
 }
Example #3
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message to send.</param>
        public Task SendAsync(ISenderMessage message)
        {
            var shouldCompress = message.ShouldCompress(_compressed);

            var stringValue = shouldCompress
                ? MessageCompression.Compress(message.StringValue)
                : message.StringValue;

            var namedPipeMessage = new NamedPipeMessage
            {
                StringValue   = stringValue,
                MessageFormat = message.MessageFormat,
                Priority      = message.Priority,
                Headers       = new Dictionary <string, string>()
            };

            var originatingSystemAlreadyExists = false;

            foreach (var header in message.Headers)
            {
                if (header.Key == HeaderName.OriginatingSystem)
                {
                    originatingSystemAlreadyExists = true;
                }

                namedPipeMessage.Headers.Add(header.Key, header.Value);
            }

            namedPipeMessage.Headers[HeaderName.MessageFormat] = message.MessageFormat.ToString();

            if (!originatingSystemAlreadyExists)
            {
                namedPipeMessage.Headers[HeaderName.OriginatingSystem] = "NamedPipe";
            }

            if (shouldCompress)
            {
                namedPipeMessage.Headers[HeaderName.CompressedPayload] = "true";
            }

            var messageString = _serializer.SerializeToString(namedPipeMessage);

            _messages.Add(messageString);

            return(_completedTask);
        }
 /// <summary>
 /// Synchronously sends the specified message.
 /// </summary>
 /// <param name="source">The <see cref="ISender"/> from which to send the message.</param>
 /// <param name="message">The message to send.</param>
 public static void Send(this ISender source, ISenderMessage message)
 {
     source.SendAsync(message).Wait();
 }
 /// <summary>
 /// Synchronously sends the specified message.
 /// </summary>
 /// <param name="source">The <see cref="ISender"/> from which to send the message.</param>
 /// <param name="message">The message to send.</param>
 public static void Send(this ISender source, ISenderMessage message)
 {
     source.SendAsync(message).Wait();
 }
 /// <summary>
 /// Sends the specified message.
 /// </summary>
 /// <param name="message">The message to send.</param>
 public Task SendAsync(ISenderMessage message)
 {
     var messageString = _serializer.SerializeToString(message);
     _messages.Add(messageString);
     return _completedTask;
 }
 /// <summary>
 /// Gets a value determining whether a sender message should be compressed.
 /// </summary>
 /// <param name="source">The sender message.</param>
 /// <param name="compressedInConfiguration">
 /// A value indicating whether the target <see cref="ISender"/> has been configured
 /// to compress messages.
 /// </param>
 /// <returns>
 /// True, if the <see cref="ISenderMessage.Compressed"/> property of
 /// <paramref name="source"/> is null and <paramref name="compressedInConfiguration"/>
 /// is true, or if the <see cref="ISenderMessage.Compressed"/> property of
 /// <paramref name="source"/> is null. Otherwise, return false.</returns>
 public static bool ShouldCompress(this ISenderMessage source, bool compressedInConfiguration)
 {
     return((source.Compressed == null && compressedInConfiguration) ||
            source.Compressed == true);
 }