Пример #1
0
        public void MessageReceived(ConsumeResult <TKey, TValue> result)
        {
            if (delay > 0)
            {
                // this.consumer.Pause(this.consumer.Assignment); // tentativa mal sucessidada de evitar o problema de max.pull.ms que é menor que o tempo da task
                logger.Log($"Start delay: {delay}ms ({DateTime.Now.ToString("HH:mm:ss")})");
                DelayHelper.DelayMessage(result.Timestamp.UnixTimestampMs, delay, cancellationToken);
                logger.Log($"Stop delay: {delay}ms ({DateTime.Now.ToString("HH:mm:ss")})");
                // this.consumer.Resume(this.consumer.Assignment); // tentativa mal sucessidada de evitar o problema de max.pull.ms que é menor que o tempo da task
            }

            this.consumerClient.MessageReceived(result);
        }
Пример #2
0
        public void MessageReceived(ConsumeResult <TKey, TValue> result)
        {
            if (delay > 0)
            {
                // this.consumer.Pause(this.consumer.Assignment);
                logger.Log($"Start delay: {delay}ms ({DateTime.Now.ToString("HH:mm:ss")})");
                DelayHelper.DelayMessage(result.Timestamp.UnixTimestampMs, delay, cancellationToken);
                logger.Log($"Stop delay: {delay}ms ({DateTime.Now.ToString("HH:mm:ss")})");
                // this.consumer.Resume(this.consumer.Assignment);
            }

            this.Resend(result, this.redirectTopic);
            this.consumerClient?.MessageReceived(result);
        }
Пример #3
0
        public Task Run(CancellationToken cancellationToken)
        {
            var groupId = this.config.GroupId;

            return(Task.Run(() =>
            {
                if (cancellationToken != default)
                {
                    // Garante que ao cancelar a task, ocorra o unsubscribe, do contrário,
                    // o cursor ficará preso na linha "c.Subscribe(...)" e o cancel() só terá efeito após retorno do kafka
                    // que pode demorar minutos até o próximo looping do while.
                    cancellationToken.Register(() =>
                    {
                        logger.Log($"Task cancelled (Unsubscribe): Topic: {topicName}, GroupId: {groupId}");
                        consumer.Unsubscribe();
                    });
                }

                logger.Log($"Subscribe: Topic: {topicName}, GroupId: {groupId}");
                consumer.Subscribe(topicName);

                // DUVIDA: Tenho duvidas passar o consumer real pro client faz sentido na prática.
                consumerClient.Subscribed(consumer, cancellationToken);

                while (!cancellationToken.IsCancellationRequested)
                {
                    try
                    {
                        var consumed = consumer.Consume(cancellationToken);

                        try
                        {
                            if (CanProcess(consumed, groupId))
                            {
                                logger.Log($"Event start: {consumerClient.GetType().FullName}");
                                consumerClient.MessageReceived(consumed);
                                logger.Log($"Event end: {consumerClient.GetType().FullName}");

                                // DUVIDA: Seria interessante esse código aqui?
                                // if (!config.EnableAutoCommit.Value)
                                // {
                                //     consumer.Commit();
                                //     logger.LogDebug($"Message commited: Topic: {cr.Topic}, GroupId: {_groupId}, IsPartitionEOF: {cr.IsPartitionEOF}, Key: {cr.Key}, Offset: {cr.Offset}, Partition: {cr.Partition}, Timestamp: {cr.Timestamp}");
                                // }
                            }
                        }
                        catch (Exception e)
                        {
                            logger.Log($"Error occured: {e.Message}");
                            consumerClient.MessageReceivedExceptionOcurred(consumed, e);
                        }
                    }
                    catch (ConsumeException e)
                    {
                        logger.Log($"Error occured: {e.Message}");
                        consumerClient.ConsumeExceptionOcurred(e);
                    }
                    catch (OperationCanceledException e)
                    {
                        logger.Log($"Error occured: {e.Message}");
                        consumer.Close();
                    }
                }
            }, cancellationToken));
        }