Exemple #1
0
        /// <summary>
        /// CreateQueueTopicPolicy:  Create Request Queue that subscribes to Topic,
        /// add permission/policy so topic can publish to the Queue
        /// </summary>
        /// <param name="queueName"></param>
        /// <returns></returns>
        private string CreateQueueTopicPolicy(string queueName)
        {
            Debug.WriteLine("Queuename: " + queueName);
            var msg1 = new Amazon.SQS.Model.CreateQueueRequest()
                       .WithQueueName(queueName)
                       .WithDefaultVisibilityTimeout(60)
                       .WithDelaySeconds(20);

            Amazon.SQS.Model.CreateQueueResponse rsp = queue.CreateQueue(msg1);
            if (rsp.CreateQueueResult.IsSetQueueUrl())
            {
                var attr = queue.GetQueueAttributes(new Amazon.SQS.Model.GetQueueAttributesRequest()
                                                    .WithQueueUrl(rsp.CreateQueueResult.QueueUrl)
                                                    .WithAttributeName(new string[] { "QueueArn" }));

                if (attr.IsSetGetQueueAttributesResult() && attr.GetQueueAttributesResult.IsSetAttribute())
                {
                    var policy = new Policy("QueuePolicy" + queueName);
                    policy.WithStatements(new Statement(Statement.StatementEffect.Allow)
                                          .WithPrincipals(new Principal("*"))
                                          .WithActionIdentifiers(Amazon.Auth.AccessControlPolicy.ActionIdentifiers.SQSActionIdentifiers.SendMessage)
                                          .WithResources(new Resource(attr.GetQueueAttributesResult.QueueARN))
                                          .WithConditions(Amazon.Auth.AccessControlPolicy.ConditionFactory.NewSourceArnCondition(topicArn)));

                    var setAttrsRequest = new Amazon.SQS.Model.SetQueueAttributesRequest()
                                          .WithQueueUrl(rsp.CreateQueueResult.QueueUrl);
                    setAttrsRequest.Attribute.Add(new Amazon.SQS.Model.Attribute()
                                                  .WithName("Policy")
                                                  .WithValue(policy.ToJson()));

                    var setAttrsResponse = queue.SetQueueAttributes(setAttrsRequest);
                }

                return(rsp.CreateQueueResult.QueueUrl);
            }
            return(null);
        }
        /// <summary>
        /// Open: Creates Queue first time called.  Credentials must have permission to create an SQS queue.
        ///
        /// </summary>
        /// <param name="queueName"></param>
        /// <returns></returns>
        private static string Open(string queueName)
        {
            if (responseQueueUrl != null)
            {
                return(responseQueueUrl);
            }
            Debug.WriteLine("Create consumer SQS: " + queueName, "SimpleMessageConnect.Open");
            var msg1 = new Amazon.SQS.Model.CreateQueueRequest()
                       .WithQueueName(queueName)
                       .WithDefaultVisibilityTimeout(600)
                       .WithDelaySeconds(20);

            Amazon.SQS.Model.CreateQueueResponse rsp = queue.CreateQueue(msg1);
            if (rsp.CreateQueueResult.IsSetQueueUrl())
            {
                responseQueueUrl = rsp.CreateQueueResult.QueueUrl;
            }
            return(responseQueueUrl);
        }