В Hangfire не хватает рабочихC#

Место общения программистов C#
Ответить
Anonymous
 В Hangfire не хватает рабочих

Сообщение Anonymous »

Мы используем службы связи Azure для отправки пользователям электронных писем и SMS-сообщений. У нас есть задание Hangfire EmailNotificationJob/SmsNotificationJob для каждого сообщения. Мы часто превышаем лимит в 100 писем в час, и задания Hangfire зависают в обработке на час.
Изображение

Код: Выделить всё

services.AddHangfire((serviceProvider, globalConfiguration) => globalConfiguration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseRecommendedSerializerSettings()
.UseRedisStorage(redisConnectionString, redisStorageOptions)
.UseBatches()
.UseThrottling(ThrottlingAction.RetryJob, 1.Seconds())
.UseTagsWithRedis(new() { TagsListStyle = TagsListStyle.Dropdown }, redisStorageOptions)
.UseApplicationInsightsTelemetry(serviceProvider));

services.AddHangfireServer((provider, options) =>
{
options.Activator = new HangfireJobActivator(provider);
options.WorkerCount = Environment.ProcessorCount * 5;
options.HeartbeatInterval = 10.Seconds();
options.SchedulePollingInterval = 1.Seconds();
options.Queues = new[] { "critical", "default", "notifications" };
options.ServerName = Environment.MachineName;
});

Код: Выделить всё

backgroundJobClient.Enqueue(x => x.Perform(new(notificationMessage.Email, notificationMessage.Subject, notificationMessage.Body), null));

...

[Queue("notifications")]
[AutomaticRetry(Attempts = 3)]
public class EmailNotificationJob
{
readonly IServiceProvider _serviceProvider;

public EmailNotificationJob(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider;

public async Task Perform(EmailNotificationJobOptions jobOptions, PerformContext? performContext)
{
...
}
}
Проблема, с которой мы столкнулись, заключается в том, что работники выбирают элементы с низким приоритетом из очереди «уведомлений», а затем задания приостанавливаются в обработке на час (из-за ограничения скорости). на Azure, но пока игнорируем этот факт). В то же время «критические» задания помещаются в критическую очередь, но над ними невозможно работать, поскольку все рабочие заняты.
Следует ли нам увеличить количество рабочих или как это сделать? мы работаем над решением этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/786 ... n-hangfire
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»