Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceClient.SubscribeQueueToTopicsAsync C# (CSharp) Метод

SubscribeQueueToTopicsAsync() публичный Метод

Subscribes an existing Amazon SQS queue to existing Amazon SNS topics asynchronously.

The policy applied to the SQS queue is similar to this: { "Version" : "2008-10-17", "Statement" : [{ "Sid" : "topic-subscription-arn:aws:sns:us-west-2:599109622955:myTopic", "Effect" : "Allow", "Principal" : "*", "Action" : ["sqs:SendMessage"], "Resource":["arn:aws:sqs:us-west-2:599109622955:myQueue"], "Condition" : { "ArnLike":{ "aws:SourceArn":["arn:aws:sns:us-west-2:599109622955:myTopic"] } } }] }

There might be a small time period immediately after subscribing the SQS queue to the SNS topic and updating the SQS queue's policy, where messages are not able to be delivered to the queue. After a moment, the new queue policy will propagate and the queue will be able to receive messages. This delay only occurs immediately after initially subscribing the queue.

public SubscribeQueueToTopicsAsync ( IList topicArns, ICoreAmazonSQS sqsClient, string sqsQueueUrl ) : string>>.Task
topicArns IList The topics to subscribe to
sqsClient ICoreAmazonSQS The SQS client used to get attributes and set the policy on the SQS queue.
sqsQueueUrl string The queue to add a subscription to.
Результат string>>.Task
        public async Task<IDictionary<string, string>> SubscribeQueueToTopicsAsync(IList<string> topicArns, ICoreAmazonSQS sqsClient, string sqsQueueUrl)
        {
            // Get the queue's existing policy and ARN
            var queueAttributes = await sqsClient.GetAttributesAsync(sqsQueueUrl).ConfigureAwait(false);

            string sqsQueueArn = queueAttributes["QueueArn"];

            Policy policy;
            string policyStr = null;
            if(queueAttributes.ContainsKey("Policy"))
                policyStr = queueAttributes["Policy"];
            if (string.IsNullOrEmpty(policyStr))
                policy = new Policy();
            else
                policy = Policy.FromJson(policyStr);

            var subscriptionArns = new Dictionary<string,string>();

            foreach (var topicArn in topicArns)
            {
                if (!HasSQSPermission(policy, topicArn, sqsQueueArn))
                    AddSQSPermission(policy, topicArn, sqsQueueArn);

                SubscribeResponse response = await this.SubscribeAsync(new SubscribeRequest
                {
                    TopicArn = topicArn,
                    Protocol = "sqs",
                    Endpoint = sqsQueueArn,
                }).ConfigureAwait(false);
                subscriptionArns.Add(topicArn, response.SubscriptionArn);
            }

            var setAttributes = new Dictionary<string, string> { { "Policy", policy.ToJson() } };
            await sqsClient.SetAttributesAsync(sqsQueueUrl, setAttributes).ConfigureAwait(false);

            return subscriptionArns;
        }
AmazonSimpleNotificationServiceClient