예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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);
        }