예제 #1
0
        private static async Task DreamStream(Message[] messages, string topic)
        {
            Variables.AmountOfMessagesVariable = EnvironmentVariables.AmountOfMessagesVariable;
            Variables.BatchTimerVariable       = EnvironmentVariables.BatchTimerVariable;
            Variables.BatchingSizeVariable     = EnvironmentVariables.BatchingSizeVariable;
            var delay    = EnvironmentVariables.DelayInMillisecond;
            var producer = await ProducerService.Setup("http://etcd");

            var messageHeaders = await producer.GetMessageHeaders(messages, topic);

            var stopwatch = new Stopwatch();
            var lastRun   = -1;

            while (true)
            {
                var time = DateTime.Now;
                if (time.Second != lastRun)
                {
                    var loadPercentage = EnvironmentVariables.Scenario[time.Minute];
                    lastRun = time.Second;

                    stopwatch.Reset();
                    stopwatch.Start();

                    var tasks = Enumerable.Range(0, messageHeaders.Length / 100 * loadPercentage)
                                .Select(i => producer.Publish(messageHeaders[i], messages[i]));
                    await Task.WhenAll(tasks);

                    stopwatch.Stop();
                    ProducerRunTime.WithLabels("Dream-Stream").Set(stopwatch.ElapsedMilliseconds);
                    MessagesPublished.WithLabels("Dream-Stream").Inc(messages.Length);
                }

                await Task.Delay(delay); //Delay added for test of timer on batches
            }
        }