Ejemplo n.º 1
0
        public override async Task ProcessMessageAsync(IReceivedMessage <TBody> message, CancellationToken cancellation)
        {
            try
            {
                var data = message.Body;
                if (data?.Context == null)
                {
                    Logger.LogError($"Message body is incorrect\n{nameof(data)}: {{@message:j}}", data);
                    message.Nack();
                    return;
                }

                if (data.Context?.WebContext == null)
                {
                    message.Ack();
                }

                var mobileAppType = GetMobileAppType(data.Context.ClientType);

                var attributionHashes = new AttributionDataHashes(
                    data.Context.WebContext?.AttributionDataHash,
                    data.Context.WebContext?.AttributionDataLingeringHash);

                var channelAttributesId = await _channelAttributesManager.GetChannelAttributesIdAsync(attributionHashes.ActualHash);

                await SaveUserActionAsync(message.Body, mobileAppType, channelAttributesId, attributionHashes, cancellation);

                message.Ack();
            }
            catch (Exception ex)
            {
                Logger.LogError(0, ex, "Unexpected error:\nMessage: {@message:j}", message.Body);
                message.Requeue();
            }
        }
Ejemplo n.º 2
0
        public override async Task ProcessMessageAsync(
            IReceivedMessage <UtmVisitTraceEvent> message,
            CancellationToken cancellation)
        {
            try
            {
                var data = message.Body;
                if (data?.Context == null)
                {
                    _logger.LogError($"Message body or {nameof(data.Context)} value cannot be empty: " +
                                     $"\n{nameof(data)}: {{@message:j}}", data);
                    message.Nack();
                    return;
                }

                if (data.Hash == 0L)
                {
                    _logger.LogError($"{data.Hash} value cannot be zero: {{@message:j}}", data);
                    message.Nack();
                }

                if (string.IsNullOrWhiteSpace(data.AttributionData))
                {
                    _logger.LogError($"{data.AttributionData} value cannot be empty: {{@message:j}}", data);
                    message.Nack();
                }

                await _channelAttributesManager.CreateChannelAttributesDataAsync(data.Hash, data.AttributionData);

                message.Ack();
            }
            catch (Exception ex)
            {
                _logger.LogError(0, ex, "Unexpected error:\nMessage: {@message:j}", message.Body);

                if (ex is ArgumentException)
                {
                    message.Nack(); // не возвращаем в очередь заведомо невалидные сообщения
                }

                message.Requeue();
            }
        }