public async System.Threading.Tasks.Task <ListSubscriptionsResponse> GetSubscriptionsAsync() { ListSubscriptionsResponse listSubscription = new ListSubscriptionsResponse(); using (AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(credentials, Amazon.RegionEndpoint.USEast2)) { ListSubscriptionsRequest request = new ListSubscriptionsRequest(); listSubscription = await snsClient.ListSubscriptionsAsync(); } return(listSubscription); }
private static async Task SetupAws() { try { Environment.SetEnvironmentVariable("AWS_ACCESS_KEY_ID", "XXX", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("AWS_SECRET_ACCESS_KEY", "XXX", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("AWS_SESSION_TOKEN", "XXX", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("AWS_DEFAULT_REGION", "us-east-1", EnvironmentVariableTarget.Process); var snsClient = new AmazonSimpleNotificationServiceClient(new AmazonSimpleNotificationServiceConfig { ServiceURL = "http://localhost:4575" }); var sqsClient = new AmazonSQSClient(new AmazonSQSConfig { ServiceURL = "http://localhost:4576" }); var topicName = topic.Replace(".", "_"); var topicRequest = new CreateTopicRequest(topicName); var topicResponse = await snsClient.CreateTopicAsync(topicRequest); var queueRequest = new CreateQueueRequest($"{topicName}.queue"); var queueResponse = await sqsClient.CreateQueueAsync(queueRequest); var subscribeRequest = new SubscribeRequest { Endpoint = queueResponse.QueueUrl, TopicArn = topicResponse.TopicArn, Protocol = "sqs", ReturnSubscriptionArn = true, Attributes = new Dictionary <string, string> { ["RawMessageDelivery"] = "true" } }; var subscribeResponse = await snsClient.SubscribeAsync(subscribeRequest); (await snsClient.ListTopicsAsync()).Topics.ForEach(x => Console.WriteLine($"[AWS] Topic: {x.TopicArn}")); (await sqsClient.ListQueuesAsync(new ListQueuesRequest())).QueueUrls.ForEach(x => Console.WriteLine($"[AWS] Queue: {x}")); (await snsClient.ListSubscriptionsAsync(new ListSubscriptionsRequest())).Subscriptions.ForEach(x => Console.WriteLine($"[AWS] Subscription: {x.TopicArn} -> {x.Endpoint}")); } catch (Exception e) { Console.WriteLine($"[AWS] {e.Message}"); } }
public async Task <T> DequeueMessageAsync <T>() { var sub = await _snsClient.ListSubscriptionsAsync(); var message = await Policy .HandleResult <ReceiveMessageResponse>(r => r.Messages.Count == 0) .WaitAndRetryAsync(new[] { TimeSpan.FromMilliseconds(100) , TimeSpan.FromMilliseconds(200) , TimeSpan.FromMilliseconds(500) , TimeSpan.FromMilliseconds(1000) }) .ExecuteAsync(async() => await _sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest { QueueUrl = QueueUrl })); var messageBody = message?.Messages?.FirstOrDefault()?.Body; return(JsonConvert.DeserializeObject <T>(messageBody ?? "{}")); }
public void DeleteAllTopics() { AmazonSimpleNotificationServiceClient clientSNS = AwsFactory.CreateClient <AmazonSimpleNotificationServiceClient>(); AmazonSQSClient clientSQS = AwsFactory.CreateClient <AmazonSQSClient>(); AmazonLambdaClient lambdaClient = AwsFactory.CreateClient <AmazonLambdaClient>(); var topics = clientSNS.ListTopicsAsync(); // var subs = clientSNS.ListSubscriptionsAsync(new ListSubscriptionsRequest()); var filas = clientSQS.ListQueuesAsync("subs"); filas.Result.QueueUrls.ForEach(i => { var deleted = clientSQS.DeleteQueueAsync(i); if (deleted.Result.HttpStatusCode != HttpStatusCode.OK) { int x = 0; } }); string nextToken = ""; do { var subs = clientSNS.ListSubscriptionsAsync(new ListSubscriptionsRequest(nextToken)); subs.Result.Subscriptions.ForEach(i => { var deleted = clientSNS.UnsubscribeAsync(i.SubscriptionArn); }); nextToken = subs.Result.NextToken; } while (!String.IsNullOrEmpty(nextToken)); var mapper = lambdaClient.ListEventSourceMappingsAsync(new Amazon.Lambda.Model.ListEventSourceMappingsRequest { FunctionName = "WebhookDispatcher" }); mapper.Result.EventSourceMappings.ToList().ForEach(i => { var result = lambdaClient.DeleteEventSourceMappingAsync(new Amazon.Lambda.Model.DeleteEventSourceMappingRequest() { UUID = i.UUID }); if (result.Result.HttpStatusCode != HttpStatusCode.OK) { int x = 0; } }); topics.Result.Topics.ForEach(i => { var deleted = clientSNS.DeleteTopicAsync(new DeleteTopicRequest() { TopicArn = i.TopicArn }); }); }