public Task StartAsync(CancellationToken cancellationToken) { _executingTask = Task.Factory.StartNew(async() => { using (var consumer = _consumerFactory.Create()) { const string topic = "build.workshop.something"; consumer.Subscribe(topic); Console.WriteLine($"KafkaConsumer started. Listening to topic: {topic}"); // Consume loop while (!_cancellationTokenSource.IsCancellationRequested) { ConsumeResult <string, string> msg; try { msg = consumer.Consume(cancellationToken); using (var scope = _serviceProvider.CreateScope()) { var message = MessagingHelper.MessageEnvelopeToMessage(msg.Value); var eventType = _eventRegistry.GetInstanceTypeFor(message.EventName); dynamic eventInstance = Activator.CreateInstance(eventType, message); dynamic handlersList = _eventHandlerFactory.GetEventHandlersFor(eventInstance, scope); foreach (var handler in handlersList) { await handler.HandleAsync(eventInstance); } } } catch (Exception ex) { Console.WriteLine($"Consumption of message failed, reason: {ex}"); continue; } try { await Task.Run(() => consumer.Commit(msg)); } catch (Exception ex) { Console.WriteLine($"Error consuming message: Exception message: {ex.Message}. Raw message: '{msg.Value}'"); } } } }, _cancellationTokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default) .ContinueWith(task => { if (task.IsFaulted) { Console.WriteLine("Event loop crashed"); } }, cancellationToken); return(Task.CompletedTask); }
public Task StartAsync(CancellationToken cancellationToken) { _executingTask = Task.Factory.StartNew(async() => { using (var consumer = _consumerFactory.Create()) { const string topic = "build.workshop.something"; consumer.Subscribe(topic); Console.WriteLine($"KafkaConsumer started. Listening to topic: {topic}"); // Consume loop while (!_cancellationTokenSource.IsCancellationRequested) { ConsumeResult <string, string> msg; try { msg = consumer.Consume(cancellationToken); } catch (Exception ex) { Console.WriteLine($"Consumption of message failed, reason: {ex}"); continue; } Console.WriteLine($"Received message: Topic: {msg.Topic}"); Console.WriteLine($"Message payload:\n{msg.Value}"); try { await Task.Run(() => consumer.Commit(msg)); } catch (Exception ex) { Console.WriteLine($"Error consuming message: Exception message: {ex.Message}. Raw message: '{msg.Value}'"); } } } }, _cancellationTokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default) .ContinueWith(task => { if (task.IsFaulted) { Console.WriteLine("Event loop crashed"); } }, cancellationToken); return(Task.CompletedTask); }