예제 #1
0
        /// <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();
            }
        }
예제 #2
0
        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);
            }
        }