private async Task RunConsumerAsync(CancellationToken token) { try { _consumer.Subscribe(); while (true) { try { var message = _consumer.Consume(token); var handlerCompletionResponse = await HandleMessage(message); if (handlerCompletionResponse) { _consumer.Commit(); } } catch (Exception e) { _logger.LogError(e, e.Message); } } } catch (OperationCanceledException) { _consumer.Dispose(); } }
protected override Task ExecuteAsync(CancellationToken cancellationToken) { const string topic = "test"; _consumer.Subscribe <SampleMessage>(topic, message => { Console.WriteLine($"Received message Id = {message.Value.Id} Offset = {message.Offset}"); return(Task.CompletedTask); }); Task.Run(async() => { for (;;) { await _producer.ProduceAsync(topic, new SampleMessage { Id = Guid.NewGuid() }); await Task.Delay(1000, cancellationToken); } }, cancellationToken); return(Task.CompletedTask); }
public Task StartAsync(CancellationToken cancellationToken) { Task.Run(() => { using (IKafkaConsumer <Ignore, string> c = this._kafkaConsumerProvider.GetKafkaConsumer <Ignore, string>("consumer-selection-count")) { c.Subscribe(); try { while (true) { try { var cr = c.Consume(cancellationToken); _logger.LogInformation($"1. Consumed message '{cr.Message.Value}' at: '{cr.TopicPartitionOffset}'."); SelectionSummaryKafkaMessage kafkaSocketMessage = null; try { kafkaSocketMessage = cr.Message?.Value?.FromJSON <SelectionSummaryKafkaMessage>(); } catch (Exception ex) { _logger.LogError($"Exception occured in KafkaSocketMessage deserialization: {ex.Message}"); } if (kafkaSocketMessage != null) { SocketMessage calculationResultMessage = new SocketMessage() { Code = "selection_count_calculated", Data = kafkaSocketMessage }; Task.Run(async() => { await _sampleSocketMessageHandler.SendMessageAsync(kafkaSocketMessage.UserId, calculationResultMessage.ToJSON()); }); } } catch (ConsumeException e) { _logger.LogError($"Error occured: {e.Error.Reason}"); } } } catch (OperationCanceledException e) { _logger.LogError($"OperationCanceledException occured: {e.Message}"); c.Close(); } catch (Exception ex) { _logger.LogError($"Exception occured: {ex.Message}"); } } }, cancellationToken); Task.Run(() => { using (IKafkaConsumer <Ignore, string> c = this._kafkaConsumerProvider.GetKafkaConsumer <Ignore, string>("consumer-selection-synchronization")) { c.Subscribe(); try { while (true) { try { var cr = c.Consume(cancellationToken); _logger.LogInformation($"2. Consumed message '{cr.Message.Value}' at: '{cr.TopicPartitionOffset}'."); SelectionSummaryKafkaMessage[] kafkaSocketMessage = null; try { kafkaSocketMessage = cr.Message?.Value?.FromJSON <SelectionSummaryKafkaMessage[]>(); } catch (Exception ex) { _logger.LogError($"Exception occured in KafkaSocketMessage deserialization: {ex.Message}"); } if (kafkaSocketMessage != null) { SocketMessage calculationResultMessage = new SocketMessage() { Code = "selection_synchronization_calculated", Data = kafkaSocketMessage }; Task.Run(async() => { await _sampleSocketMessageHandler.SendMessageAsync(kafkaSocketMessage.First().UserId, calculationResultMessage.ToJSON()); }); } } catch (ConsumeException e) { _logger.LogError($"Error occured: {e.Error.Reason}"); } } } catch (OperationCanceledException e) { _logger.LogError($"OperationCanceledException occured: {e.Message}"); c.Close(); } catch (Exception ex) { _logger.LogError($"Exception occured: {ex.Message}"); } } }, cancellationToken); return(Task.CompletedTask); }
public static IMessageSubscription Subscribe <T>( this IKafkaConsumer consumer, Func <IMessage <T>, Task> handler) where T : class => consumer.Subscribe(TopicDefinition.FromType <T>().Topic, handler);