private string CreateCore(BackgroundTaskEnvelope task, Func <string, IState> createState)
        {
            var queue = this.GetQueueForTask(task);

            if (this._logger.IsEnabled(LogLevel.Debug))
            {
                this._logger.LogDebug("Enqueuing task. task_type={0} queue={1}", task.GetType().Name, queue);
            }

            var id = this._jobClient.Create(
                Job.FromExpression <HangfireTaskExecutor>(e => e.Execute(
                                                              new HangfireBackgroundTaskWrapper(task),
                                                              null,
                                                              CancellationToken.None)),
                createState(queue));

            return(id);
        }
Ejemplo n.º 2
0
        private string CreateCore(BackgroundTaskEnvelope task, Func <string, IState> createState)
        {
            var queue = GetQueueForTask(task.Task);

            if (this._logger.IsEnabled(LogLevel.Debug))
            {
                this._logger.LogDebug("Enqueuing task {TaskType} to {Queue}", task.GetType().Name, queue);
            }

            var hangfireBackgroundTaskEnvelope = new HangfireBackgroundTaskWrapper(task);

            task.Headers = new Dictionary <string, string>();

            using var activity = TaskExecutor.ActivitySource.StartActivity($"{hangfireBackgroundTaskEnvelope.Envelope.Task.GetType()} send", ActivityKind.Producer);

            ActivityContext contextToInject = default;

            if (activity != null)
            {
                contextToInject = activity.Context;
            }
            else if (Activity.Current != null)
            {
                contextToInject = Activity.Current.Context;
            }

            TaskExecutor.Propagator.Inject(
                new PropagationContext(contextToInject, Baggage.Current),
                task.Headers,
                (c, k, v) => c[k] = v);

            activity?.SetTag("messaging.system", "hangfire");
            activity?.SetTag("messaging.destination", queue);
            activity?.SetTag("messaging.destination_kind", "queue");

            var id = this._jobClient.Create(
                Job.FromExpression <HangfireTaskExecutor>(e => e.Execute(
                                                              hangfireBackgroundTaskEnvelope,
                                                              null,
                                                              CancellationToken.None)),
                createState(queue));

            return(id);
        }