/// <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); }