У меня есть роль рабочего, которая обрабатывает элементы из очереди. Это в основном бесконечный цикл, который выталкивает элементы из очереди и асинхронно обрабатывает их.Роль рабочего процесса - выбор значения конфигурации
У меня есть две настройки конфигурации (и MessageGetLimit
), которые я хочу, чтобы рабочая роль была выбрана при изменении (поэтому без необходимости перезапуска).
private TimeSpan PollingInterval
{
get
{
return TimeSpan.FromSeconds(Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("PollingIntervalSeconds")));
}
}
private int MessageGetLimit
{
get
{
return Convert.ToInt32(RoleEnvironment.GetConfigurationSettingValue("MessageGetLimit"));
}
}
public override void Run()
{
while (true)
{
var messages = queue.GetMessages(MessageGetLimit);
if (messages.Count() > 0)
{
ProcessQueueMessages(messages);
}
else
{
Task.Delay(PollingInterval);
}
}
}
Проблема:
В часы пик, в то время как цикл может быть запущена несколько раз в секунду. Это означает, что он будет запрашивать элементы конфигурации до 100 000 раз в день.
Является ли это вредным или неэффективным?
Я фактически реализовал это, и это вызвало больше проблем, чем помощь. С очередями я реализовал мини-задания, у которых была какая-то ожидаемая задержка. К сожалению, с отклонением опроса у меня были ситуации, когда клиент сразу отправлял 30 запросов/мини-заданий, и я был зажат на пенни, пытаясь сэкономить пару долларов в месяц, и эти просьбы были отложены ненужным обновлением. –
Задержка - это только максимальное количество времени, которое вы готовы ждать, чтобы обработать сообщение. Если это 2 секунды, он не должен ждать больше 2 секунд. Система должна всегда проверять сразу после завершения обработки сообщения, чтобы увидеть, есть ли другое, прежде чем снова начать откат. Если вы ищете немедленный ответ во все времена, то оставайтесь с жесткой петлей или смотрите на что-то другое, кроме очередей. Я соглашусь, что в некоторых случаях это может быть защемление пенни, но что-то в этом требует регулярного вмешательства человека. Это будет стоить больше. – MikeWo