Используя Hangfire, как я могу настроить веб-приложение для постановки в очередь с BackgroundJobClient.Create без запуска внутрипроцессного сервера? - PullRequest
1 голос
/ 31 января 2020

Наше веб-приложение ставит в очередь задания, используя BackgroundJobClient.Create, но мы хотим обрабатывать все задания в отдельном сервисе Windows, а не в нашем веб-приложении. Если наше веб-приложение запускается без вызова builder.UseHangfireServer, то при создании новых заданий выдается следующая ошибка:

System.InvalidOperationException: 
JobStorage.Current property value has not been initialized. 
You must set it before using Hangfire Client or Server API.

Похоже, что AddHangfire(options => ...UseSqlServerStorage(...) лямбда не запускается до тех пор, пока не будет вызван UseHangfireServer. В качестве обходного пути мы можем настроить наше веб-приложение на прослушивание очередей, названных в честь некоторого идентификатора GUID, но это кажется пустой тратой ресурсов для веб-приложения, которое может запускать несколько экземпляров в веб-ферме.

Есть ли какие-либо способ настроить клиент Hangfire без запуска сервера Hangfire в том же процессе?

1 Ответ

1 голос
/ 03 февраля 2020

Есть ли способ настроить клиент Hangfire без запуска сервера Hangfire в том же процессе?

Да, насколько я знаю, для клиентского модуля вам просто нужно создать свой BackgroundJobClient так:

IBackgroundJobClient client = new BackgroundJobClient(new SqlServerStorage(yourConnectionString)) ;
// or any overload of the SqlServerStorage constructor.
...