public Task <bool> PublishAsync(JobExecution jobExecution, CancellationToken ctx)
        {
            using var _ = MessagingMetrics.TimePublishDuration();

            try
            {
                if (!TryGetOrCreateModel(out var model) || model is null)
                {
                    return(Task.FromResult(false));
                }
                var job = jobExecution.Job;

                model.EnsureConfig(_options.JobsExchange, job.Subject);
                model.BasicPublish(_options.JobsExchange, job.Subject, true, null, Encoding.UTF8.GetBytes(job.Payload));

                MessagingMetrics.MessagesPublished(job.Subject);

                return(Task.FromResult(model.WaitForConfirms()));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Failed to publish job {JobId} to RabbitMQ", jobExecution.Job.Id);
                return(Task.FromResult(false));
            }
        }
        public Task <bool> PublishAsync(JobExecution jobExecution, CancellationToken ctx)
        {
            using var _ = MessagingMetrics.TimePublishDuration();

            var job     = jobExecution.Job;
            var message = new ServiceBusMessage(job.Payload)
            {
                MessageId    = jobExecution.Id.ToString(),
                PartitionKey = job.Id.ToString(),
                Subject      = job.Subject,
            };

            MessagingMetrics.MessagesPublished(job.Subject);

            return(WithSenderAsync(conn => conn.SendMessageAsync(message, ctx)));
        }