Exemplo n.º 1
0
        private async Task Consume()
        {
            var token = _cancellationToken.Token;
            var serializerSettings = JsonConverterExtensions.CreateSettings();

            while (!token.IsCancellationRequested)
            {
                if (_consumer.Consume(out var message, 1000))
                {
                    var sw = Stopwatch.StartNew();
                    try
                    {
                        dynamic evnt = JsonConvert.DeserializeObject(message.Value, serializerSettings);
                        if (evnt as IEvent == null)
                        {
                            continue;
                        }
                        evnt.Enrich(message.ToEventMetadata());
                        await _handler.HandleEvent(evnt);

                        _logger.Debug($"Processed event {evnt.GetType().FullName} in {sw.ElapsedMilliseconds} ms.");
                    }
                    catch (JsonSerializationException e)
                    {
                        _logger.Error(e, "Could not deserialize event!");
                    }
                    catch (Exception e)
                    {
                        _logger.Error(e, "Could not process event!");
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Will produce to Kafka and wait for delivery reports
        /// </summary>
        /// <param name="topic">The topic to produce to</param>
        /// <param name="events">The events to produce</param>
        /// <returns>Delivery reports for the produced events</returns>
        public async Task <EventMetadata[]> ProduceAsync(string topic, params IEvent[] events)
        {
            _logger.Information($"Producing {events.Length} events to {topic}..");
            var sw    = Stopwatch.StartNew();
            var tasks = new List <Task <Message <Null, string> > >();

            foreach (var evnt in events)
            {
                var content = JsonConverterExtensions.SerializeEvent(evnt);
                tasks.Add(_producer.ProduceAsync(topic, null, content));
            }
            var result = await Task.WhenAll(tasks.ToArray());

            _logger.Information($"Done producing {events.Length} in {sw.ElapsedMilliseconds} ms!");
            sw.Stop();
            return(result.Select(m => m.ToEventMetadata()).ToArray());
        }