/// <summary> /// Returns the approximate number of queued messages /// </summary> public int ApproximateNumberOfMessages() { ClearErrorInfo(); int result = 0; try { GetQueueAttributesRequest attrreq = new GetQueueAttributesRequest(); attrreq.QueueUrl = queueurl.QueueUrl; attrreq.AttributeNames.Add("ApproximateNumberOfMessages"); GetQueueAttributesResponse attrresp = queue.GetQueueAttributes(attrreq); if (attrresp != null) { result = attrresp.ApproximateNumberOfMessages; } } catch (Exception ex) { ErrorCode = e_Exception; ErrorMessage = ex.Message; } return(result); }
/// <summary> /// Initializes the Amazon SQS client and then uses it to call the /// GetQueueAttributesAsync method to retrieve the attributes for the /// Amazon SQS queue. /// </summary> public static async Task Main() { // If the Amazon SQS message queue is not in the same AWS Region as your // default user, you need to provide the AWS Region as a parameter to the // client constructor. var client = new AmazonSQSClient(); var queueUrl = "https://sqs.us-east-2.amazonaws.com/0123456789ab/New-Example-Queue"; var attrs = new List <string>() { "All" }; var request = new GetQueueAttributesRequest { QueueUrl = queueUrl, AttributeNames = attrs, }; var response = await client.GetQueueAttributesAsync(request); if (response.HttpStatusCode == System.Net.HttpStatusCode.OK) { DisplayAttributes(response); } }
/// <inheritdoc/> public GetQueueAttributesResponse GetAttributes(GetQueueAttributesRequest request) { return(AggregateExceptionExtract.Extract(() => { return GetAttributesAsync(request).Result; })); }
internal GetQueueAttributesResponse GetQueueAttributes(GetQueueAttributesRequest request) { var marshaller = new GetQueueAttributesRequestMarshaller(); var unmarshaller = GetQueueAttributesResponseUnmarshaller.Instance; return(Invoke <GetQueueAttributesRequest, GetQueueAttributesResponse>(request, marshaller, unmarshaller)); }
public void PopulateQueueAttributes(QueueDescription queue) { var req = new GetQueueAttributesRequest() { QueueUrl = queue.Url }; req.AttributeNames.Add("ApproximateNumberOfMessages"); req.AttributeNames.Add("MessageRetentionPeriod"); var response = client.GetQueueAttributes(req); if (response.Attributes != null && response.Attributes.Any()) { foreach (KeyValuePair <string, string> att in response.Attributes) { switch (att.Key) { case "MessageRetentionPeriod": queue.MessageRetentionPeriod = TimeSpan.FromSeconds(Double.Parse(att.Value)); break; case "ApproximateNumberOfMessages": queue.ApproximateNumberOfMessages = Int32.Parse(att.Value); break; } } } }
public MessageQueueDetail Build <T>(string uri) { var listResponse = _client.ListQueues(new ListQueuesRequest().WithQueueNamePrefix(uri)); var exists = listResponse.ListQueuesResult.QueueUrl.Any(); if (exists) { var queue = _client.GetQueueUrl(new GetQueueUrlRequest().WithQueueName(uri)); var request = new GetQueueAttributesRequest().WithQueueUrl(queue.GetQueueUrlResult.QueueUrl); var response = _client.GetQueueAttributes(request); return(new MessageQueueDetail { MessageCount = response.GetQueueAttributesResult.ApproximateNumberOfMessages, Uri = queue.GetQueueUrlResult.QueueUrl, Exists = true }); } else { return(new MessageQueueDetail { MessageCount = null, Uri = uri, Exists = false }); } }
private static void QueueInfo() { GetQueueAttributesRequest request = new GetQueueAttributesRequest { QueueUrl = QUEUE_URL, AttributeNames = new List <string>() { "All" } }; var response = client.GetQueueAttributes(request); Console.WriteLine("Attributes for queue ARN '" + response.QueueARN + "':"); Console.WriteLine(" Approximate number of messages:" + response.ApproximateNumberOfMessages); Console.WriteLine(" Approximate number of messages delayed: " + response.ApproximateNumberOfMessagesDelayed); Console.WriteLine(" Approximate number of messages not visible: " + response.ApproximateNumberOfMessagesNotVisible); Console.WriteLine(" Queue created on: " + response.CreatedTimestamp); Console.WriteLine(" Delay seconds: " + response.DelaySeconds); Console.WriteLine(" Queue last modified on: " + response.LastModifiedTimestamp); Console.WriteLine(" Maximum message size: " + response.MaximumMessageSize); Console.WriteLine(" Message retention period: " + response.MessageRetentionPeriod); Console.WriteLine(" Visibility timeout: " + response.VisibilityTimeout); Console.WriteLine(" Policy: " + response.Policy); Console.WriteLine(" Attributes:"); foreach (var attr in response.Attributes) { Console.WriteLine(" " + attr.Key + ": " + attr.Value); } }
async Task ConfigureLambdaWithQueueAsync(string queueName) { string queueArn = null; AmazonSQSClient sqsClient = AwsFactory.CreateClient <AmazonSQSClient>(); GetQueueUrlRequest queueUrlReq = new GetQueueUrlRequest(); queueUrlReq.QueueName = queueName; GetQueueUrlResponse getQueueUrlResp = await sqsClient.GetQueueUrlAsync(queueUrlReq); GetQueueAttributesRequest queueAttribReq = new GetQueueAttributesRequest(); queueAttribReq.AttributeNames.Add(QueueAttributeName.QueueArn); queueAttribReq.QueueUrl = getQueueUrlResp.QueueUrl; var queueAttribResp = await sqsClient.GetQueueAttributesAsync(queueAttribReq); queueArn = queueAttribResp.QueueARN; AmazonLambdaClient lambdaClient = AwsFactory.CreateClient <AmazonLambdaClient>(); CreateEventSourceMappingRequest eventMappingReq = new CreateEventSourceMappingRequest(); eventMappingReq.FunctionName = "WebhookDispatcher"; eventMappingReq.BatchSize = 10; eventMappingReq.Enabled = true; eventMappingReq.EventSourceArn = queueArn; await lambdaClient.CreateEventSourceMappingAsync(eventMappingReq); }
private GetQueueAttributesResult GetTaskQueueAttr(Priority oPriority) { string strUrlQueue = GetQueueUrl(oPriority); GetQueueAttributesResult oGetQueueAttributesResult = null; try { using (AmazonSQS oSQSClient = AWSClientFactory.CreateAmazonSQSClient()) { GetQueueAttributesRequest oGetQueueAttributesRequest = new GetQueueAttributesRequest(); oGetQueueAttributesRequest.QueueUrl = strUrlQueue; GetQueueAttributesResponse oGetQueueAttributesResponse = oSQSClient.GetQueueAttributes(oGetQueueAttributesRequest); if (oGetQueueAttributesResponse.IsSetGetQueueAttributesResult()) { oGetQueueAttributesResult = oGetQueueAttributesResponse.GetQueueAttributesResult; } } } catch (AmazonSQSException) { } catch { } return(oGetQueueAttributesResult); }
/// <summary> /// Initiates the asynchronous execution of the GetQueueAttributes operation. /// <seealso cref="Amazon.SQS.IAmazonSQS"/> /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the GetQueueAttributes operation.</param> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> /// <returns>The task object representing the asynchronous operation.</returns> public Task <GetQueueAttributesResponse> GetQueueAttributesAsync(GetQueueAttributesRequest request, CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = new GetQueueAttributesRequestMarshaller(); var unmarshaller = GetQueueAttributesResponseUnmarshaller.Instance; return(Invoke <IRequest, GetQueueAttributesRequest, GetQueueAttributesResponse>(request, marshaller, unmarshaller, signer, cancellationToken)); }
void SetupTopicAndQueue() { long ticks = DateTime.Now.Ticks; // Setup SNS topic. snsClient = new AmazonSimpleNotificationServiceClient( settings.AWSAccessKeyID, settings.AWSSecretAccessKey, RegionEndpoint.GetBySystemName(settings.AWSS3Region.SystemName)); sqsClient = new AmazonSQSClient( settings.AWSAccessKeyID, settings.AWSSecretAccessKey, RegionEndpoint.GetBySystemName(settings.AWSS3Region.SystemName)); topicArn = snsClient.CreateTopic(new CreateTopicRequest { Name = "GlacierDownload-" + ticks }).TopicArn; Debug.WriteLine($"topicArn: {topicArn}"); var createQueueRequest = new CreateQueueRequest { QueueName = "GlacierDownload-" + ticks }; var createQueueResponse = sqsClient.CreateQueue(createQueueRequest); this.queueUrl = createQueueResponse.QueueUrl; Debug.WriteLine($"QueueURL: {this.queueUrl}"); var getQueueAttributesRequest = new GetQueueAttributesRequest { AttributeNames = new List <string> { "QueueArn" }, QueueUrl = this.queueUrl }; var response = sqsClient.GetQueueAttributes(getQueueAttributesRequest); queueArn = response.QueueARN; Debug.WriteLine($"QueueArn: {queueArn}"); // Setup the Amazon SNS topic to publish to the SQS queue. snsClient.Subscribe(new SubscribeRequest() { Protocol = "sqs", Endpoint = queueArn, TopicArn = topicArn }); // Add the policy to the queue so SNS can send messages to the queue. var policy = SQS_POLICY.Replace("{TopicArn}", topicArn).Replace("{QuernArn}", queueArn); sqsClient.SetQueueAttributes(new SetQueueAttributesRequest { QueueUrl = this.queueUrl, Attributes = new Dictionary <string, string> { { QueueAttributeName.Policy, policy } } }); }
public async Task <GetQueueAttributesResponse> GetAttributesAsync(GetQueueAttributesRequest request) { request.QueueName = this.QueueName; var marshaller = new GetQueueAttributesRequestMarshaller(); var unmarshaller = GetQueueAttributesResponseUnmarshaller.Instance; return(await _serviceClient.InvokeAsync <GetQueueAttributesRequest, GetQueueAttributesResponse>(request, marshaller, unmarshaller).ConfigureAwait(false)); }
private void CreateDLQ(AmazonSQSClient sqsClient) { try { var request = new CreateQueueRequest(_subscription.RedrivePolicy.DeadlLetterQueueName.Value); var createDeadLetterQueueResponse = sqsClient.CreateQueueAsync(request).GetAwaiter().GetResult(); var queueUrl = createDeadLetterQueueResponse.QueueUrl; if (!string.IsNullOrEmpty(queueUrl)) { //We need the ARN of the dead letter queue to configure the queue redrive policy, not the name var attributesRequest = new GetQueueAttributesRequest { QueueUrl = queueUrl, AttributeNames = new List <string> { "QueueArn" } }; var attributesResponse = sqsClient.GetQueueAttributesAsync(attributesRequest).GetAwaiter().GetResult(); if (attributesResponse.HttpStatusCode != HttpStatusCode.OK) { throw new InvalidOperationException($"Could not find ARN of DLQ, status: {attributesResponse.HttpStatusCode}"); } _dlqARN = attributesResponse.QueueARN; } else { throw new InvalidOperationException($"Could not find create DLQ, status: {createDeadLetterQueueResponse.HttpStatusCode}"); } } catch (QueueDeletedRecentlyException ex) { //QueueDeletedRecentlyException - wait 30 seconds then retry //Although timeout is 60s, we could be partway through that, so apply Copernican Principle //and assume we are halfway through var error = $"Could not create queue {_subscription.ChannelName.Value} because {ex.Message} waiting 60s to retry"; s_logger.LogError(ex, error); Thread.Sleep(TimeSpan.FromSeconds(30)); throw new ChannelFailureException(error, ex); } catch (AmazonSQSException ex) { var error = $"Could not create queue {_queueUrl} subscribed to topic {_subscription.RoutingKey.Value} in region {_awsConnection.Region.DisplayName} because {ex.Message}"; s_logger.LogError(ex, error); throw new InvalidOperationException(error, ex); } catch (HttpErrorResponseException ex) { var error = $"Could not create queue {_queueUrl} subscribed to topic {_subscription.RoutingKey.Value} in region {_awsConnection.Region.DisplayName} because {ex.Message}"; s_logger.LogError(ex, error); throw new InvalidOperationException(error, ex); } }
protected async Task <GetQueueAttributesResponse> GetAttrsAsync(IEnumerable <string> attrKeys) { var request = new GetQueueAttributesRequest { QueueUrl = Url, AttributeNames = new List <string>(attrKeys) }; return(await Client.GetQueueAttributesAsync(request).ConfigureAwait(false)); }
/// <inheritdoc/> public GetQueueAttributesResponse GetAttributes(GetQueueAttributesRequest request) { request.QueueName = this.QueueName; var marshaller = new GetQueueAttributesRequestMarshaller(); var unmarshaller = GetQueueAttributesResponseUnmarshaller.Instance; return(_serviceClient.Invoke <GetQueueAttributesRequest, GetQueueAttributesResponse>(request, marshaller, unmarshaller)); }
static void SetupTopicAndQueue(Amazon.RegionEndpoint region) { long ticks = DateTime.Now.Ticks; // Setup SNS topic. s_snsClient = new AmazonSimpleNotificationServiceClient(region); s_sqsClient = new AmazonSQSClient(region); s_topicArn = s_snsClient.CreateTopic(new CreateTopicRequest { Name = "GlacierDownload-" + ticks }).TopicArn; WriteLogConsole("topicArn: " + s_topicArn); CreateQueueRequest createQueueRequest = new CreateQueueRequest(); createQueueRequest.QueueName = "GlacierDownload-" + ticks; CreateQueueResponse createQueueResponse = s_sqsClient.CreateQueue(createQueueRequest); s_queueUrl = createQueueResponse.QueueUrl; WriteLogConsole("QueueURL: " + s_queueUrl); GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest(); getQueueAttributesRequest.AttributeNames = new List <string> { "QueueArn" }; getQueueAttributesRequest.QueueUrl = s_queueUrl; GetQueueAttributesResponse response = s_sqsClient.GetQueueAttributes(getQueueAttributesRequest); s_queueArn = response.QueueARN; WriteLogConsole("QueueArn: " + s_queueArn); // Setup the Amazon SNS topic to publish to the SQS queue. s_snsClient.Subscribe(new SubscribeRequest() { Protocol = "sqs", Endpoint = s_queueArn, TopicArn = s_topicArn }); // Add the policy to the queue so SNS can send messages to the queue. var policy = SQS_POLICY.Replace("{TopicArn}", s_topicArn).Replace("{QuernArn}", s_queueArn); s_sqsClient.SetQueueAttributes(new SetQueueAttributesRequest() { QueueUrl = s_queueUrl, Attributes = new Dictionary <string, string> { { QueueAttributeName.Policy, policy } } }); }
/// <inheritdoc/> public IAsyncResult BeginGetAttributes(GetQueueAttributesRequest request, AsyncCallback callback, object state) { request.QueueName = this.QueueName; var marshaller = new GetQueueAttributesRequestMarshaller(); var unmarshaller = GetQueueAttributesResponseUnmarshaller.Instance; return(_serviceClient.BeginInvoke <GetQueueAttributesRequest>(request, marshaller, unmarshaller, callback, state)); }
/// <summary> /// Gets the Queue's attributes /// </summary> /// <param name="client"></param> /// <param name="queueUrl"></param> /// <returns></returns> /// <remarks> /// All - returns all values. /// ApproximateNumberOfMessages — returns the approximate number of visible messages in a queue. For more information, see Resources Required to Process Messages in the Amazon SQS Developer Guide. /// ApproximateNumberOfMessagesNotVisible — returns the approximate number of messages that are not timed-out and not deleted. For more information, see Resources Required to Process Messages in the Amazon SQS Developer Guide. /// VisibilityTimeout — returns the visibility timeout for the queue. For more information about visibility timeout, see Visibility Timeout in the Amazon SQS Developer Guide. /// CreatedTimestamp — returns the time when the queue was created (epoch time in seconds). /// LastModifiedTimestamp — returns the time when the queue was last changed (epoch time in seconds). /// Policy — returns the queue's policy. /// MaximumMessageSize — returns the limit of how many bytes a message can contain before Amazon SQS rejects it. /// MessageRetentionPeriod — returns the number of seconds Amazon SQS retains a message. /// QueueArn — returns the queue's Amazon resource name (ARN). /// </remarks> public GetQueueAttributesResult GetQueueAttributes(AmazonSQS client, string queueUrl) { var request = new GetQueueAttributesRequest { QueueUrl = queueUrl, AttributeName = new List <string>(new[] { "All" }) }; GetQueueAttributesResponse response = client.GetQueueAttributes(request); return(response.GetQueueAttributesResult); }
protected async Task <int> CountMessagesInErrorQueue() { var attReq = new GetQueueAttributesRequest { QueueUrl = createdErrorQueue.QueueUrl }; attReq.AttributeNames.Add("ApproximateNumberOfMessages"); var response = await sqsClient.GetQueueAttributesAsync(attReq).ConfigureAwait(false); return(response.ApproximateNumberOfMessages); }
public bool HasMessages() { var request = new GetQueueAttributesRequest { QueueUrl = QueueUrl, AttributeNames = new List <string>(new string[] { SQSConstants.ATTRIBUTE_APPROXIMATE_NUMBER_OF_MESSAGES }) }; var response = _sqsClient.GetQueueAttributes(request); return(response.ApproximateNumberOfMessages > 0); }
public int GetMessageCount() { var sqsRequest = new GetQueueAttributesRequest { QueueUrl = queueUrl }; sqsRequest.AttributeNames.Add("ApproximateNumberOfMessages"); var sqsResponse = client.GetQueueAttributes(sqsRequest); return(sqsResponse.ApproximateNumberOfMessages); }
/// <inheritdoc/> public async Task <long> GetMessageCountAsync(CancellationToken cancellationToken = default) { var request = new GetQueueAttributesRequest { QueueUrl = await GetQueueUrl().ConfigureAwait(false) }; var response = await _client.GetQueueAttributesAsync(request, cancellationToken).ConfigureAwait(false); return(response.ApproximateNumberOfMessages); }
protected GetQueueAttributesResult GetAttrs(IEnumerable <string> attrKeys) { var request = new GetQueueAttributesRequest { QueueUrl = Url, AttributeNames = new List <string>(attrKeys) }; var result = Client.GetQueueAttributes(request); return(result); }
public GetQueueAttributesResponse DoGetQueueAttributes(GetQueueAttributesRequest request) { List <string> lParams = new List <string>(); lParams.Add(string.Format("&AWSAccessKeyId={0}", Util.UrlEncode(AccessKey))); lParams.Add(string.Format("&Action={0}", "GetQueueAttributes")); lParams.Add(string.Format("&SignatureMethod={0}", "HmacSHA256")); lParams.Add(string.Format("&SignatureVersion={0}", "2")); lParams.Add(string.Format("&Timestamp={0}", Util.UrlEncode(DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")))); lParams.Add(string.Format("&Version={0}", "2012-11-05")); for (int i = 0; i < request.AttributeNames.Count; i++) { lParams.Add(string.Format("&AttributeName.{0}={1}", i + 1, Util.UrlEncode(request.AttributeNames[i]))); } lParams.Sort(StringComparer.Ordinal); var parameters = string.Join("", lParams); parameters = parameters.Substring(1); string sig = Util.GetSignature(request.QueueUrl, "GET", parameters, SecretKey); parameters = string.Format("{0}&Signature={1}", parameters, Util.UrlEncode(sig)); var wRequest = WebRequest.Create(string.Format("{0}?{1}", request.QueueUrl, parameters)) as HttpWebRequest; wRequest.Method = "GET"; wRequest.ContentType = "application/x-www-form-urlencoded"; wRequest.KeepAlive = false; using (var response = wRequest.GetResponse() as HttpWebResponse) using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream)) { var body = reader.ReadToEnd(); var element = XElement.Parse(body); XmlSerializer serializer = new XmlSerializer(typeof(GetQueueAttributesResponse)); var setQueueAttributesResponse = (GetQueueAttributesResponse)serializer.Deserialize(element.CreateReader()); foreach (var attribute in setQueueAttributesResponse.GetQueueAttributesResult.Attributes) { var propType = typeof(GetQueueAttributesResult).GetProperty(attribute.Name); var converter = TypeDescriptor.GetConverter(propType.PropertyType); var value = converter.ConvertFromString(attribute.Value); propType.SetValue(setQueueAttributesResponse.GetQueueAttributesResult, value); } return(setQueueAttributesResponse); } }
public bool HasAnyMessagesInQueue() { GetQueueAttributesRequest request = new GetQueueAttributesRequest(this.queueUrl, new List <string> () { "ApproximateNumberOfMessages" }); GetQueueAttributesResponse response = this.sqsClient.GetQueueAttributes(request); bool hasAnyMessagesInQueue = response.ApproximateNumberOfMessages > 0; return(hasAnyMessagesInQueue); }
public int GetApproximateNumberOfMessagesInQueue() { var qar = new GetQueueAttributesRequest(); qar.QueueUrl = _queueUrl; qar.AttributeNames = new List <string> { "ApproximateNumberOfMessages" }; var attributes = _sqsClient.GetQueueAttributes(qar); return(attributes.ApproximateNumberOfMessages); }
static void SetupTopicAndQueue(Amazon.RegionEndpoint awsRegion) { long ticks = DateTime.Now.Ticks; // Setup SNS topic. snsClient = new AmazonSimpleNotificationServiceClient(awsRegion); sqsClient = new AmazonSQSClient(awsRegion); topicArn = snsClient.CreateTopic(new CreateTopicRequest { Name = "GlacierInventory-" + ticks }).TopicArn; Console.WriteLine($"topicArn: {topicArn}"); CreateQueueRequest createQueueRequest = new CreateQueueRequest(); createQueueRequest.QueueName = "GlacierInventory-" + ticks; CreateQueueResponse createQueueResponse = sqsClient.CreateQueue(createQueueRequest); queueUrl = createQueueResponse.QueueUrl; Console.WriteLine($"QueueURL: {queueUrl}"); GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest(); getQueueAttributesRequest.AttributeNames = new List <string> { "QueueArn" }; getQueueAttributesRequest.QueueUrl = queueUrl; GetQueueAttributesResponse response = sqsClient.GetQueueAttributes(getQueueAttributesRequest); queueArn = response.QueueARN; Console.WriteLine($"QueueArn: {queueArn}"); // Setup the Amazon SNS topic to publish to the SQS queue. snsClient.Subscribe(new SubscribeRequest() { Protocol = "sqs", Endpoint = queueArn, TopicArn = topicArn }); // Add the policy to the queue so SNS can send messages to the queue. var policy = SQS_POLICY.Replace("{TopicArn}", topicArn).Replace("{QuernArn}", queueArn).Replace("{AccountArn}", accountArn); sqsClient.SetQueueAttributes(new SetQueueAttributesRequest() { QueueUrl = queueUrl, Attributes = new Dictionary <string, string> { { QueueAttributeName.Policy, policy } } }); }
public override async Task <long> ReadMessageCountAsync() { CheckOpened(null); var request = new GetQueueAttributesRequest() { QueueUrl = _queue, AttributeNames = new List <string>(new string[] { QueueAttributeName.ApproximateNumberOfMessages }) }; var response = _client.GetQueueAttributesAsync(request, _cancel.Token).Result; return(response.ApproximateNumberOfMessages); }
public string GetQueueArn(Uri queueUrl) { // get queueArn var attributeRequest = new GetQueueAttributesRequest().WithQueueUrl(queueUrl.AbsoluteUri).WithAttributeName( queueArnAttributeName); using (var sqs = amazonSqsFactory()) { var queueAttributes = sqs.GetQueueAttributes(attributeRequest); return(queueAttributes.GetQueueAttributesResult.Attribute[0].Value); } }
public GetQueueAttributesResponse GetQueueAttributes(string queueUrl) { List <string> list = new List <string>(); list.Add("All"); GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest { QueueUrl = queueUrl, AttributeNames = list }; GetQueueAttributesResponse getQueueAttributesResponse = SQSClient.GetQueueAttributes(getQueueAttributesRequest); return(getQueueAttributesResponse); }