public AmazonRecieveMessage(IAmazonInternalSettings amazonInternalSettings, AmazonSQSQueueContext amazonSQSQueueContext, IAmazonMessageProcessorFactory amazonMessageProcessorFactory) { _amazonMessageProcessorFactory = amazonMessageProcessorFactory; m_amazonInternalSettings = amazonInternalSettings ?? throw new ArgumentNullException(nameof(amazonInternalSettings)); m_amazonSqsQueueContext = amazonSQSQueueContext ?? throw new ArgumentNullException(nameof(amazonSQSQueueContext)); m_log = m_amazonInternalSettings.RebusLoggerFactory.GetLogger <AmazonRecieveMessage>(); }
public SqsAmazonSendMessageProcessor(string destinationAddress, IAmazonInternalSettings amazonInternalSettings, AmazonSQSQueueContext amazonSqsQueueContext, IRebusTime rebusTime) { this._destinationAddress = destinationAddress; this._amazonInternalSettings = amazonInternalSettings; this._amazonSqsQueueContext = amazonSqsQueueContext; this._rebusTime = rebusTime; }
public static async Task CheckSqsPolicy(this IAmazonInternalSettings amazonInternalSettings, ITransactionContext transactionContext, string destinationQueueUrlByName, SqsInfo sqsInformation, string topicArn) { var logger = amazonInternalSettings.RebusLoggerFactory.GetLogger(); var sqsClient = amazonInternalSettings.CreateSqsClient(transactionContext); var attributes = await sqsClient.GetAttributesAsync(destinationQueueUrlByName); var policyKey = "Policy"; var statement = new Statement(Statement.StatementEffect.Allow).WithPrincipals(Principal.AllUsers).WithResources(new Resource(sqsInformation.Arn)).WithConditions(ConditionFactory.NewSourceArnCondition(topicArn)).WithActionIdentifiers(SQSActionIdentifiers.SendMessage); Policy sqsPolicy; var setPolicy = false; if (attributes.ContainsKey(policyKey)) { logger.Debug($"Updating existing policy on sqs queue {0} for topic {1}", sqsInformation.Url, topicArn); var policyString = attributes[policyKey]; attributes = new Dictionary <string, string>(); sqsPolicy = Policy.FromJson(policyString); if (sqsPolicy.CheckIfStatementExists(statement) == false) { sqsPolicy = sqsPolicy.WithStatements(statement); attributes.Add(policyKey, sqsPolicy.ToJson()); setPolicy = true; } } else { logger.Debug($"Creating policy on sqs queue {0} for topic {1}", sqsInformation.Url, topicArn); attributes = new Dictionary <string, string>(); sqsPolicy = new Policy().WithStatements(statement); attributes.Add(policyKey, sqsPolicy.ToJson()); setPolicy = true; } if (setPolicy) { await sqsClient.SetAttributesAsync(sqsInformation.Url, attributes); } }
public static async Task <string> GetTopicArn(this IAmazonInternalSettings amazonInternalSettings, string topic, RebusTransactionScope scope = null) { var result = await Task.FromResult(s_topicArnCache.GetOrAdd(topic, s => { var rebusTransactionScope = scope ?? new RebusTransactionScope(); try { var logger = amazonInternalSettings.RebusLoggerFactory.GetLogger(); var snsClient = amazonInternalSettings.CreateSnsClient(rebusTransactionScope.TransactionContext); var formatedTopicName = amazonInternalSettings.TopicFormatter.FormatTopic(topic); var findTopicAsync = snsClient.FindTopicAsync(formatedTopicName); AsyncHelpers.RunSync(() => findTopicAsync); var findTopicResult = findTopicAsync.Result; string topicArn = findTopicResult?.TopicArn; if (findTopicResult == null) { logger.Debug($"Did not find sns topic {0}", formatedTopicName); var task = snsClient.CreateTopicAsync(new CreateTopicRequest(formatedTopicName)); AsyncHelpers.RunSync(() => task); topicArn = task.Result?.TopicArn; logger.Debug($"Created sns topic {0} => {1}", formatedTopicName, topicArn); } logger.Debug($"Using sns topic {0} => {1}", formatedTopicName, topicArn); return(topicArn); } finally { if (scope == null) { rebusTransactionScope.Dispose(); } } })); return(result); }
/// <summary> /// Constructs the transport with the specified settings /// </summary> public AmazonSqsTransport(IAmazonInternalSettings amazonInternalSettings) { m_AmazonInternalSettings = amazonInternalSettings ?? throw new ArgumentNullException(nameof(amazonInternalSettings)); m_log = amazonInternalSettings.RebusLoggerFactory.GetLogger <AmazonSqsTransport>(); if (amazonInternalSettings.InputQueueAddress != null) { if (amazonInternalSettings.InputQueueAddress.Contains("/") && !Uri.IsWellFormedUriString(amazonInternalSettings.InputQueueAddress, UriKind.Absolute)) { var message = $"The input queue address '{amazonInternalSettings.InputQueueAddress}' is not valid - please either use a simple queue name (eg. 'my-queue') or a full URL for the queue endpoint (e.g. 'https://sqs.eu-central-1.amazonaws.com/234234234234234/somqueue')."; throw new ArgumentException(message, nameof(amazonInternalSettings.InputQueueAddress)); } } m_amazonSQSQueueContext = new AmazonSQSQueueContext(m_AmazonInternalSettings); m_AmazonSendMessageCommandFactory = new AmazonSendMessageCommandFactory(m_AmazonInternalSettings, m_amazonSQSQueueContext); m_amazonCreateSqsQueue = new AmazonCreateSQSQueue(m_AmazonInternalSettings); m_amazonSqsQueuePurgeUtility = new AmazonSQSQueuePurgeUtility(m_AmazonInternalSettings); m_AmazonMessageProcessorFactory = new AmazonMessageProcessorFactory(m_AmazonInternalSettings); m_AmazonRecieveMessage = new AmazonRecieveMessage(m_AmazonInternalSettings, m_amazonSQSQueueContext, m_AmazonMessageProcessorFactory); }
public AmazonSendMessageCommandFactory(IAmazonInternalSettings amazonInternalSettings, AmazonSQSQueueContext amazonSqsQueueContext) { this._amazonInternalSettings = amazonInternalSettings ?? throw new ArgumentNullException(nameof(amazonInternalSettings)); this._amazonSqsQueueContext = amazonSqsQueueContext ?? throw new ArgumentNullException(nameof(amazonSqsQueueContext)); }
public AmazonSQSQueueContext(IAmazonInternalSettings m_AmazonInternalSettings) { this.m_AmazonInternalSettings = m_AmazonInternalSettings; }
/// <summary></summary> /// <param name="amazonInternalSettings"></param> public AmazonMessageProcessorFactory(IAmazonInternalSettings amazonInternalSettings) { _amazonInternalSettings = amazonInternalSettings; }
public AmazonSQSTransportFactory(IAmazonInternalSettings amazonInternalSettings, IRebusTime rebusTime) { m_amazonInternalSettings = amazonInternalSettings; _rebusTime = rebusTime; }
public AmazonSQSTransportFactory(IAmazonInternalSettings amazonInternalSettings) { m_amazonInternalSettings = amazonInternalSettings; }
public RebusMessageAmazonMessageProcessor(Message message, IAmazonInternalSettings amazonInternalSettings) { _amazonInternalSettings = amazonInternalSettings; _message = message; }
public SnsAmazonSendMessageProcessor(string destinationAddress, IAmazonInternalSettings amazonInternalSettings) { this._destinationAddress = destinationAddress; this._amazonInternalSettings = amazonInternalSettings; }
public AmazonSQSQueuePurgeUtility(IAmazonInternalSettings amazonInternalSettings) { m_AmazonInternalSettings = amazonInternalSettings; m_log = amazonInternalSettings.RebusLoggerFactory.GetLogger <AmazonSQSQueuePurgeUtility>(); }
/// <summary>Initializes a new instance of the <see cref="SnsTopicAmazonMessageProcessor"/> class.</summary> /// <param name="message">The message.</param> /// <param name="amazonInternalSettings">The amazon internal settings.</param> public SnsTopicAmazonMessageProcessor(JObject message, IAmazonInternalSettings amazonInternalSettings) { _amazonInternalSettings = amazonInternalSettings; _message = message; }
public static async Task <string> GetTopicArn(this IAmazonSimpleNotificationService snsClient, IAmazonInternalSettings m_AmazonInternalSettings, string topic) { var formatedTopicName = m_AmazonInternalSettings.TopicFormatter.FormatTopic(topic); var findTopicResult = await snsClient.FindTopicAsync(formatedTopicName); var topicArn = findTopicResult?.TopicArn; if (topicArn == null) { var createTopicResponse = await snsClient.CreateTopicAsync(formatedTopicName); if (createTopicResponse.HttpStatusCode != HttpStatusCode.OK) { throw new SnsRebusException($"Error creating topic {formatedTopicName}.", createTopicResponse.CreateAmazonExceptionFromResponse()); } topicArn = createTopicResponse.TopicArn; } return(topicArn); }
public AmazonCreateSQSQueue(IAmazonInternalSettings amazonInternalSettings) { m_AmazonInternalSettings = amazonInternalSettings ?? throw new ArgumentNullException(nameof(amazonInternalSettings)); m_log = m_AmazonInternalSettings.RebusLoggerFactory.GetLogger <AmazonCreateSQSQueue>(); }