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"); }
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); }
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); } }