コード例 #1
0
 public Worker(ILogger <Worker> logger, IAmazonSQS sqs, IMediator mediator)
 {
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
     _sqs      = sqs ?? throw new ArgumentNullException(nameof(sqs));
     _mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
     ABTestEvaluatorFactory.GetEvaluator("Burgas");
 }
コード例 #2
0
        public Task Handle(SimpleCountingEvent notification, CancellationToken cancellationToken)
        {
            var evaluator = ABTestEvaluatorFactory.GetEvaluator("simple");

            if (evaluator == null)
            {
                throw new ArgumentNullException($"Could not create an instance of {nameof(evaluator)} evaluator.");
            }

            evaluator.Evaluate(notification, CancellationToken.None);

            return(Task.CompletedTask);
        }
コード例 #3
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                try
                {
                    var request = new ReceiveMessageRequest
                    {
                        QueueUrl            = _eventQueueUrl,
                        MaxNumberOfMessages = 10,
                        WaitTimeSeconds     = 5
                    };

                    var result = await _sqs.ReceiveMessageAsync(request);

                    if (result.Messages.Any())
                    {
                        foreach (var message in result.Messages)
                        {
                            // Some Processing code would live here
                            var @event = JsonConvert.DeserializeObject <SuccessFailEvent>(message.Body);
                            await _mediator.Publish(@event);

                            var value = ABTestEvaluatorFactory.GetEvaluator(@event.TestId).GetValue();

                            var deleteResult = await _sqs.DeleteMessageAsync(_eventQueueUrl, message.ReceiptHandle);

                            _logger.LogInformation("Processing Message: {message} | {time}", message.Body, DateTimeOffset.Now);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex.InnerException.ToString());
                }

                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            }
        }