public async Task ProduceMessage(SchedulerCallbackMessage message, string label) { var topicClient = new TopicClient("Endpoint", "topicname"); var jsonMessage = JsonConvert.SerializeObject(message); var topicMessage = new Message(Encoding.UTF8.GetBytes(jsonMessage)) { ContentType = "application/json", TimeToLive = TimeSpan.FromHours(24), Label = label }; await topicClient.SendAsync(topicMessage); await topicClient.CloseAsync(); }
private async Task ConsumeMessage(Message message, CancellationToken cancellationToken) { _logger.LogInformation($"{DateTimeOffset.UtcNow}: Message received!"); var response = new SchedulerCallbackMessage() { Started = DateTime.UtcNow }; using var scope = _scopeFactory.CreateScope(); var service = scope.ServiceProvider.GetRequiredService <ISchedulerHandler>(); var trigger = message.GetBodyAs <SchedulerTriggerMessage>(); try { var result = await service.TriggerScheduledTask(trigger.Id); response.Message = result.Message; response.Result = result.Result; } catch (Exception e) { var exception = new MessageException(); if (e.InnerException != null) { _logger.LogCritical(e.InnerException, e.InnerException.Message); exception.Message = e.InnerException.Message; exception.StackTrace = e.InnerException.StackTrace; exception.Site = e.InnerException.TargetSite?.Name; } else { _logger.LogCritical(e, e.Message); exception.Message = e.Message; exception.StackTrace = e.StackTrace; exception.Site = e.TargetSite?.Name; } response.Exception = exception; response.Result = Result.Failure; } response.Finished = DateTime.UtcNow; await _responseProducer.ProduceMessage(response, trigger.CallbackLabel); await Task.CompletedTask; }