public bool Execute() { Console.WriteLine("Moving {0} messages from {1} to {2}", Count, SourceQueueName, DestinationQueueName); var config = new AmazonSQSConfig(); var client = new DefaultAwsClientFactory().GetSqsClient(config.RegionEndpoint); var sourceQueue = new SqsQueueByName(config.RegionEndpoint, SourceQueueName, client, JustSayingConstants.DEFAULT_HANDLER_RETRY_COUNT); var destinationQueue = new SqsQueueByName(config.RegionEndpoint, DestinationQueueName, client, JustSayingConstants.DEFAULT_HANDLER_RETRY_COUNT); var messages = PopMessagesFromSourceQueue(sourceQueue); var receiptHandles = messages.ToDictionary(m => m.MessageId, m => m.ReceiptHandle); var sendResponse = destinationQueue.Client.SendMessageBatch(new SendMessageBatchRequest { QueueUrl = destinationQueue.Url, Entries = messages.Select(x => new SendMessageBatchRequestEntry { Id = x.MessageId, MessageBody = x.Body }).ToList() }); var deleteResponse = sourceQueue.Client.DeleteMessageBatch(new DeleteMessageBatchRequest { QueueUrl = sourceQueue.Url, Entries = sendResponse.Successful.Select(x => new DeleteMessageBatchRequestEntry { Id = x.Id, ReceiptHandle = receiptHandles[x.Id] }).ToList() }); Console.WriteLine("Moved {0} messages from {1} to {2}", sendResponse.Successful.Count, SourceQueueName, DestinationQueueName); return(true); }
public async Task <bool> ExecuteAsync() { Console.WriteLine($"Moving {Count} messages from {SourceQueueName} to {DestinationQueueName} in {Region}."); var loggerFactory = new LoggerFactory(); var config = new AmazonSQSConfig { RegionEndpoint = RegionEndpoint.GetBySystemName(Region) }; var client = new DefaultAwsClientFactory().GetSqsClient(config.RegionEndpoint); var sourceQueue = new SqsQueueByName(config.RegionEndpoint, SourceQueueName, client, JustSayingConstants.DefaultHandlerRetryCount, loggerFactory); var destinationQueue = new SqsQueueByName(config.RegionEndpoint, DestinationQueueName, client, JustSayingConstants.DefaultHandlerRetryCount, loggerFactory); await EnsureQueueExistsAsync(sourceQueue).ConfigureAwait(false); await EnsureQueueExistsAsync(destinationQueue).ConfigureAwait(false); var messages = PopMessagesFromSourceQueue(sourceQueue); var receiptHandles = messages.ToDictionary(m => m.MessageId, m => m.ReceiptHandle); var sendResponse = destinationQueue.Client.SendMessageBatch(new SendMessageBatchRequest { QueueUrl = destinationQueue.Uri.AbsoluteUri, Entries = messages.Select(x => new SendMessageBatchRequestEntry { Id = x.MessageId, MessageBody = x.Body }).ToList() }); sourceQueue.Client.DeleteMessageBatch(new DeleteMessageBatchRequest { QueueUrl = sourceQueue.Uri.AbsoluteUri, Entries = sendResponse.Successful.Select(x => new DeleteMessageBatchRequestEntry { Id = x.Id, ReceiptHandle = receiptHandles[x.Id] }).ToList() }); Console.WriteLine($"Moved {sendResponse.Successful.Count} messages from {SourceQueueName} to {DestinationQueueName} in {Region}."); return(true); }
/// <summary> /// Creates a new instance of <see cref="IAwsClientFactory"/>. /// </summary> /// <returns> /// The created instance of <see cref="IAwsClientFactory"/>. /// </returns> public IAwsClientFactory Build() { if (ClientFactory != null) { return(ClientFactory()); } DefaultAwsClientFactory factory; if (Credentials == null) { factory = new DefaultAwsClientFactory(); } else { factory = new DefaultAwsClientFactory(Credentials); } factory.ServiceUri = ServiceUri; return(factory); }