Exemplo n.º 1
0
 public Task Deliver(Uri destination, MsgNThenMessage message)
 {
     if (_deliverySchemes.TryGetValue(destination.Scheme, out var scheme))
     {
         return(scheme.Deliver(destination, message));
     }
     else
     {
         throw new Exception($"Failed to find ({nameof(IUriDeliveryScheme)}) for {destination}");
     }
 }
Exemplo n.º 2
0
        public Task Deliver(Uri destination, MsgNThenMessage message)
        {
            // (bool sent, bool clients) TrySendMessage(string parentPipeName, string childPipeName, object body,
            //    int maxListLength = int.MaxValue, TimeSpan ? expiry = null);
            //_redisTaskFunnel.TrySendMessage()

            //redis://<ignored>/<parent>/<child>
            if (destination.Segments.Length != 3)
            {
                throw new Exception($"redis uri didn't conform to the correct structure {destination}.");
            }
            var parent = destination.Segments[1].TrimEnd('/');
            var child  = destination.Segments[2];

            var body = ((MemoryStream)message.Body).ToArray();

            _redisTaskFunnel.TrySendMessage(parent, child, body);
            return(Task.CompletedTask);
        }
Exemplo n.º 3
0
        public async Task Deliver(Uri destination, MsgNThenMessage message)
        {
            //https://s3.us-east-2.amazonaws.com/my-bucket-name/filename
            //s3://john.doe@my-bucket-name/filename[
            //s3://<credentialName>@<bucketname>/filename
            var credentials     = GetCredentials(destination);
            var bucketName      = destination.Host;
            var pathAndQuery    = Uri.UnescapeDataString(destination.PathAndQuery).TrimStart('/');
            var messageId       = message.Headers[HeaderConstants.MessageId];
            var messageGroupId  = message.Headers[HeaderConstants.MessageGroupId];
            var correlationId   = message.Headers[HeaderConstants.CorrelationId];
            var fileKey         = string.Format(pathAndQuery, messageId, messageGroupId, correlationId);
            var queryDictionary = QueryHelpers.ParseQuery(destination.Query);

            if (message.Body.CanSeek)
            {
                message.Body.Position = 0;
            }
            using (var client = new AmazonS3Client(credentials.awsAccessKeyId, credentials.awsSecretAccessKey, RegionEndpoint.USEast1))
            {
                var uploadRequest = new TransferUtilityUploadRequest
                {
                    InputStream = message.Body,
                    Key         = fileKey,
                    BucketName  = bucketName,
                    CannedACL   = S3CannedACL.BucketOwnerFullControl
                };
                if (queryDictionary.TryGetValue(QueryConstants.S3CannedACL, out var val))
                {
                    var cannedAcl = S3CannedACL.FindValue(val);
                    if (cannedAcl != null)
                    {
                        uploadRequest.CannedACL = cannedAcl;
                    }
                }

                var fileTransferUtility = new TransferUtility(client);
                await fileTransferUtility.UploadAsync(uploadRequest);
            }
        }
Exemplo n.º 4
0
        public Task Deliver(Uri destination, MsgNThenMessage message)
        {
            //rabbitmq://<exchangename>/<routingKey>
            var exchange        = destination.Host;
            var routingKey      = Uri.UnescapeDataString(destination.PathAndQuery).TrimStart('/');
            var basicProperties = _channel.CreateBasicProperties();

            //Headers = new Dictionary<string, object>()

            if (message.Headers != null)
            {
                var nonHeaders = new HashSet <string>()
                {
                    HeaderConstants.MessageId, HeaderConstants.AppId, HeaderConstants.ReplyTo, HeaderConstants.UserId,
                    HeaderConstants.CorrelationId
                };
                DoAssignment(message.Headers[HeaderConstants.MessageId], val => basicProperties.MessageId         = val);
                DoAssignment(message.Headers[HeaderConstants.AppId], val => basicProperties.AppId                 = val);
                DoAssignment(message.Headers[HeaderConstants.ReplyTo], val => basicProperties.ReplyTo             = val);
                DoAssignment(message.Headers[HeaderConstants.UserId], val => basicProperties.UserId               = val);
                DoAssignment(message.Headers[HeaderConstants.CorrelationId], val => basicProperties.CorrelationId = val);
                //DoAssignment(message.Headers[HeaderConstants.DeliveryMode], val => basicProperties.DeliveryMode = val);
                foreach (var header in message.Headers)
                {
                    if (!nonHeaders.Contains(header.Key))
                    {
                        basicProperties.Headers[header.Key] = header.Value;
                    }
                }
            }

            var body = ((MemoryStream)message.Body).ToArray();

            _channel.BasicPublish(exchange, routingKey, true, basicProperties, body);
            return(Task.CompletedTask);
        }