Exemplo n.º 1
0
        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}");
            }
        }