Hangfire ServerName из контекста - PullRequest
1 голос
/ 19 сентября 2019

Мы пытаемся получить имя сервера Hangfire из запущенного фонового задания.Возможно ли это, и если да, то как?

Пока что мы рассмотрели объект ProcessContext, но, похоже, он не включает имя_сервера.

Спасибо запомощь.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Слепой выстрел (не тестировался), но я бы попробовал что-то подобное с IApplyStateFilter:

public class GetServerIdFilter : IApplyStateFilter
{
    public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
    {
        var state = context.NewState as ProcessingState;
        if (state != null)
        {
            var serverId = state.ServerId;
            var workerId = state.WorkerId;
        }
    }

    public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
    {
    }
}

Фильтр можно зарегистрировать как в этот ответ

0 голосов
/ 19 сентября 2019

Я знаю, что следующее не совсем отвечает на ваш вопрос о чтении его с работы, насколько я видел, это выглядит невозможным.Если это невозможно, этот ответ может быть полезен, так что вот, пожалуйста.

Я не уверен, что есть возможность прочитать его откуда-то.

В любом случае, документы Hangfire здесь читают, что вы можете обработать имя сервера вручную:

Поскольку значения по умолчанию обеспечивают уникальность только на уровне процесса, вам следуетобработайте его вручную, если вы хотите запустить разные экземпляры сервера в одном и том же процессе:

var options = new BackgroundJobServerOptions
    {
        ServerName = String.Format(
            "{0}.{1}",
            Environment.MachineName,
            Guid.NewGuid().ToString())
    };

    var server = new BackgroundJobServer(options);

    // or

    app.UseHangfireServer(options);
...