/// <summary> /// Creates instance of the <see cref="AzureQueuePublisher{TModel}"/> /// </summary> /// <param name="logFactory">Log factory</param> /// <param name="serializer">Serializer</param> /// <param name="publisherName">Name of the publisher</param> /// <param name="settings">Queue settings</param> /// <param name="bufferLifetime">Time interval, which indicates how often buffered messages will be published to the queue</param> /// <param name="disableTelemetry">Disables Application Insight telemetry</param> /// <param name="fireNForgetQueueExistenceCheck">Speed up azure queue existence check</param> public AzureQueuePublisher( [NotNull] ILogFactory logFactory, [NotNull] IAzureQueueSerializer <TModel> serializer, [NotNull] string publisherName, [NotNull] AzureQueueSettings settings, TimeSpan?bufferLifetime = null, bool disableTelemetry = true, bool fireNForgetQueueExistenceCheck = false) : base(bufferLifetime ?? TimeSpan.FromMilliseconds(100), logFactory, publisherName) { _serializer = serializer ?? throw new ArgumentNullException(nameof(serializer)); _settings = settings ?? throw new ArgumentNullException(nameof(settings)); if (string.IsNullOrWhiteSpace(settings.QueueName)) { throw new InvalidOperationException("Queue name should be not empty"); } _log = logFactory.CreateLog(this, publisherName); _settings = new AzureQueueSettings { QueueName = _settings.QueueName.ToLower(), ConnectionString = _settings.ConnectionString }; _cloudQueue = _settings.GetQueueAsync(fireNForgetQueueExistenceCheck).GetAwaiter().GetResult(); if (disableTelemetry) { DisableTelemetry(); } }
public AzureQueuePublisher(string applicationName, AzureQueueSettings settings) : base(applicationName, 1000) { _settings = settings; _settings.QueueName = _settings.QueueName.ToLower(); _cloudQueue = _settings.GetQueueAsync().GetAwaiter().GetResult(); DisableTelemetry(); }
public override async Task Execute() { if (_cloudQueue == null) { _cloudQueue = await _settings.GetQueueAsync(); } var messages = (await _cloudQueue.GetMessagesAsync(31)).ToArray(); if (messages.Length == 0) { return; } foreach (var message in messages) { var data = _deserializer.Deserialize(message.AsString); await Task.WhenAll(_callbacks.Select(itm => itm(data))); await _cloudQueue.DeleteMessageAsync(message); } }