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); } }
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); }
private void DeleteQueue(SqsQueueName queueName, string queueUrl) { var request = new DeleteQueueRequest { QueueUrl = queueUrl }; var response = SqsClient.DeleteQueue(request); queueNameMap.TryRemove(queueName.QueueName, out _); }
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]); }
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); }
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); }
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); }
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 }); }