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