Exemple #1
0
        private bool QueueExists(SqsQueueName queueName, bool forceRecheck = false)
        {
            if (!forceRecheck && queueNameMap.ContainsKey(queueName.QueueName))
            {
                return(true);
            }

            try
            {
                var definition = GetQueueDefinition(queueName, forceRecheck);
                return(definition != null);
            }
            catch (QueueDoesNotExistException)
            {
                log.DebugFormat("SQS Queue named [{0}] does not exist", queueName);
                return(false);
            }
            catch (AmazonSQSException sqsex)
            {
                if (!sqsex.Message.Contains("specified queue does not exist"))
                {
                    throw;
                }

                log.DebugFormat("SQS Queue named [{0}] does not exist", queueName);
                return(false);
            }
        }
Exemple #2
0
        private SqsQueueDefinition CreateQueue(SqsQueueName queueName, int?visibilityTimeoutSeconds = null,
                                               int?receiveWaitTimeSeconds     = null, bool?disasbleBuffering = null,
                                               SqsRedrivePolicy redrivePolicy = null)
        {
            SqsQueueDefinition queueDefinition = null;

            var request = new CreateQueueRequest
            {
                QueueName  = queueName.AwsQueueName,
                Attributes = new Dictionary <string, string>
                {
                    {
                        QueueAttributeName.ReceiveMessageWaitTimeSeconds,
                        TimeSpan.FromSeconds(receiveWaitTimeSeconds ?? DefaultReceiveWaitTime)
                        .TotalSeconds
                        .ToString(CultureInfo.InvariantCulture)
                    },
                    {
                        QueueAttributeName.VisibilityTimeout,
                        TimeSpan.FromSeconds(visibilityTimeoutSeconds ?? DefaultVisibilityTimeout)
                        .TotalSeconds
                        .ToString(CultureInfo.InvariantCulture)
                    },
                    {
                        QueueAttributeName.MessageRetentionPeriod,
                        (QueueNames.IsTempQueue(queueName.QueueName)
                            ? SqsQueueDefinition.DefaultTempQueueRetentionSeconds
                            : SqsQueueDefinition.DefaultPermanentQueueRetentionSeconds).ToString(CultureInfo.InvariantCulture)
                    }
                }
            };

            if (redrivePolicy != null)
            {
                var json = redrivePolicy.ToJson();
                request.Attributes.Add(QueueAttributeName.RedrivePolicy, json);
            }

            try
            {
                var createResponse = SqsClient.CreateQueue(request);

                // Note - must go fetch the attributes from the server after creation, as the request attributes do not include
                // anything assigned by the server (i.e. the ARN, etc.).
                queueDefinition = GetQueueDefinition(queueName, createResponse.QueueUrl);

                queueDefinition.DisableBuffering = disasbleBuffering ?? DisableBuffering;

                queueNameMap[queueDefinition.QueueName] = queueDefinition;
            }
            catch (QueueNameExistsException)
            {   // Queue exists with different attributes, instead of creating, alter those attributes to match what was requested
                queueDefinition = UpdateQueue(queueName, request.ToSetAttributesRequest(null), disasbleBuffering);
            }

            return(queueDefinition);
        }
Exemple #3
0
        private void DeleteQueue(SqsQueueName queueName, string queueUrl)
        {
            var request = new DeleteQueueRequest
            {
                QueueUrl = queueUrl
            };

            var response = SqsClient.DeleteQueue(request);

            queueNameMap.TryRemove(queueName.QueueName, out _);
        }
Exemple #4
0
        private SqsQueueDefinition GetQueueDefinition(SqsQueueName queueName, bool forceRecheck = false)
        {
            if (!forceRecheck && queueNameMap.TryGetValue(queueName.QueueName, out var qd))
            {
                return(qd);
            }

            var queueUrl = GetQueueUrl(queueName);

            return(GetQueueDefinition(queueName, queueUrl));
        }
        public static SqsQueueName GetSqsQueueName(string originalQueueName)
        {
            if (queueNameMap.TryGetValue(originalQueueName, out var sqn))
            {
                return(sqn);
            }

            sqn = new SqsQueueName(originalQueueName);

            return(queueNameMap.TryAdd(originalQueueName, sqn)
                ? sqn
                : queueNameMap[originalQueueName]);
        }
Exemple #6
0
        private SqsQueueDefinition GetQueueDefinition(SqsQueueName queueName, string queueUrl)
        {
            var response = SqsClient.GetQueueAttributes(new GetQueueAttributesRequest
            {
                QueueUrl       = queueUrl,
                AttributeNames = new List <string> {
                    "All"
                }
            });

            var qd = response.Attributes.ToQueueDefinition(queueName, queueUrl, DisableBuffering);

            queueNameMap[queueName.QueueName] = qd;

            return(qd);
        }
Exemple #7
0
        private string GetQueueUrl(SqsQueueName queueName, bool forceRecheck = false)
        {
            if (!forceRecheck && queueNameMap.TryGetValue(queueName.QueueName, out var qd))
            {
                if (!string.IsNullOrEmpty(qd.QueueUrl))
                {
                    return(qd.QueueUrl);
                }
            }

            var response = SqsClient.GetQueueUrl(new GetQueueUrlRequest {
                QueueName = queueName.AwsQueueName
            });

            return(response.QueueUrl);
        }
Exemple #8
0
        private SqsQueueDefinition UpdateQueue(SqsQueueName sqsQueueName, SetQueueAttributesRequest request,
                                               bool?disasbleBuffering = null)
        {
            if (string.IsNullOrEmpty(request.QueueUrl))
            {
                request.QueueUrl = GetQueueUrl(sqsQueueName);
            }

            var response = SqsClient.SetQueueAttributes(request);

            // Note - must go fetch the attributes from the server after creation, as the request attributes do not include
            // anything assigned by the server (i.e. the ARN, etc.).
            var queueDefinition = GetQueueDefinition(sqsQueueName, request.QueueUrl);

            queueDefinition.DisableBuffering = disasbleBuffering ?? DisableBuffering;

            queueNameMap[queueDefinition.QueueName] = queueDefinition;

            return(queueDefinition);
        }
Exemple #9
0
        public static SqsQueueDefinition ToQueueDefinition(this Dictionary <string, string> attributes, SqsQueueName queueName,
                                                           string queueUrl, bool disableBuffering)
        {
            var attrToUse = attributes ?? new Dictionary <string, string>();

            Guard.AgainstNullArgument(queueName, "queueName");
            Guard.AgainstNullArgument(queueUrl, "queueUrl");

            return(new SqsQueueDefinition
            {
                SqsQueueName = queueName,
                QueueUrl = queueUrl,
                VisibilityTimeout = attrToUse.ContainsKey(QueueAttributeName.VisibilityTimeout)
                    ? attrToUse[QueueAttributeName.VisibilityTimeout].ToInt(SqsQueueDefinition.DefaultVisibilityTimeoutSeconds)
                    : SqsQueueDefinition.DefaultVisibilityTimeoutSeconds,
                ReceiveWaitTime = attrToUse.ContainsKey(QueueAttributeName.ReceiveMessageWaitTimeSeconds)
                    ? attrToUse[QueueAttributeName.ReceiveMessageWaitTimeSeconds].ToInt(SqsQueueDefinition.DefaultWaitTimeSeconds)
                    : SqsQueueDefinition.DefaultWaitTimeSeconds,
                CreatedTimestamp = attrToUse.ContainsKey(QueueAttributeName.CreatedTimestamp)
                    ? attrToUse[QueueAttributeName.CreatedTimestamp].ToInt64(DateTime.UtcNow.ToUnixTime())
                    : DateTime.UtcNow.ToUnixTime(),
                DisableBuffering = disableBuffering,
                ApproximateNumberOfMessages = attrToUse.ContainsKey(QueueAttributeName.ApproximateNumberOfMessages)
                    ? attrToUse[QueueAttributeName.ApproximateNumberOfMessages].ToInt64(0)
                    : 0,
                QueueArn = attrToUse.ContainsKey(QueueAttributeName.QueueArn)
                    ? attrToUse[QueueAttributeName.QueueArn]
                    : null,
                RedrivePolicy = attrToUse.ContainsKey(QueueAttributeName.RedrivePolicy)
                    ? attrToUse[QueueAttributeName.RedrivePolicy].FromJson <SqsRedrivePolicy>()
                    : null
            });
        }