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); }
public void Can_determine_TempQueue_with_Custom_QueuePrefix() { QueueNames.SetQueuePrefix("site1."); var tmpName = QueueNames.GetTempQueueName(); Assert.That(QueueNames.IsTempQueue(tmpName), Is.True); QueueNames.SetQueuePrefix(""); }
public void Can_determine_TempQueue_with_Custom_QueueNameFm() { QueueNames.ResolveQueueNameFn = (typeName, suffix) => "SITE.{0}{1}".Fmt(typeName, suffix.ToUpper()); var tmpName = QueueNames.GetTempQueueName(); Assert.That(QueueNames.IsTempQueue(tmpName), Is.True); QueueNames.ResolveQueueNameFn = QueueNames.ResolveQueueName; }
public static void RegisterQueue(this IModel channel, string queueName) { var args = new Dictionary <string, object> { { "x-dead-letter-exchange", QueueNames.ExchangeDlq }, { "x-dead-letter-routing-key", queueName.Replace(".inq", ".dlq").Replace(".priorityq", ".dlq") }, }; if (!QueueNames.IsTempQueue(queueName)) //Already declared in GetTempQueueName() { channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: args); } channel.QueueBind(queueName, QueueNames.Exchange, routingKey: queueName); }
public int RemoveEmptyTemporaryQueues(long createdBefore) { var queuesRemoved = 0; var localTempQueueUrlMap = new Dictionary <string, QueueNameUrlMap>(); // First, check any locally available queueNameMap.Where(kvp => QueueNames.IsTempQueue(kvp.Key)) .Where(kvp => kvp.Value.CreatedTimestamp <= createdBefore) .Each(kvp => localTempQueueUrlMap.Add(kvp.Value.QueueUrl, new QueueNameUrlMap { QueueUrl = kvp.Value.QueueUrl, QueueName = kvp.Value.QueueName })); // Refresh the local info for each of the potentials, then if they are empty and expired, remove foreach (var qNameUrl in localTempQueueUrlMap.Values) { var qd = GetQueueDefinition(qNameUrl.QueueName, qNameUrl.QueueUrl); if (qd.CreatedTimestamp > createdBefore || qd.ApproximateNumberOfMessages > 0) { continue; } DeleteQueue(qd.SqsQueueName, qd.QueueUrl); queuesRemoved++; } var queues = SqsClient.ListQueues(new ListQueuesRequest { QueueNamePrefix = QueueNames.TempMqPrefix.ToValidQueueName() }); if (queues == null || queues.QueueUrls == null || queues.QueueUrls.Count <= 0) { return(queuesRemoved); } foreach (var queueUrl in queues.QueueUrls) { // Already deleted above, or left purposely if (localTempQueueUrlMap.ContainsKey(queueUrl)) { continue; } var response = SqsClient.GetQueueAttributes(new GetQueueAttributesRequest { QueueUrl = queueUrl, AttributeNames = new List <string> { QueueAttributeName.CreatedTimestamp, QueueAttributeName.ApproximateNumberOfMessages } }); if (response == null || response.CreatedTimestamp.ToUnixTime() > createdBefore || response.ApproximateNumberOfMessages > 0) { continue; } SqsClient.DeleteQueue(new DeleteQueueRequest { QueueUrl = queueUrl }); queuesRemoved++; } return(queuesRemoved); }
public void Can_determine_TempQueue() { var tmpName = QueueNames.GetTempQueueName(); Assert.That(QueueNames.IsTempQueue(tmpName), Is.True); }