private async Task QueueNewJob(Job job, JobDefinition jobDefinition) { string queueOrTopic = !string.IsNullOrWhiteSpace(jobDefinition.MessageBusQueue) ? jobDefinition.MessageBusQueue : jobDefinition.MessageBusTopic; string data = !string.IsNullOrWhiteSpace(job.MessageBody) ? job.MessageBody : null; IDictionary <string, string> messageProperties = job.Properties; string sessionId = null; if (messageProperties == null) { messageProperties = new Dictionary <string, string> { { "jobId", job.Id } }; } else { if (!messageProperties.ContainsKey("jobId")) { messageProperties.Add("jobId", job.Id); } if (!string.IsNullOrWhiteSpace(jobDefinition.SessionMessageProperty)) { //Shouldn't happen as already validated if (!job.Properties.ContainsKey(jobDefinition.SessionMessageProperty)) { string errorMessage = $"Missing session property on job with id '{job.Id}"; _logger.Error(errorMessage); throw new Exception(errorMessage); } sessionId = job.Properties[jobDefinition.SessionMessageProperty]; } } try { if (!string.IsNullOrWhiteSpace(jobDefinition.MessageBusQueue)) { await _messengerService.SendToQueueAsJson(jobDefinition.MessageBusQueue, data, messageProperties, sessionId : sessionId); } else { await _messengerService.SendToTopicAsJson(jobDefinition.MessageBusTopic, data, messageProperties); } } catch (Exception ex) { _logger.Error(ex, $"Failed to queue job with id: {job.Id} on Queue/topic {queueOrTopic}"); } }