Я разрабатываю приложение, используя Azure Cloud Service и web api. Я хотел бы разрешить пользователям создавать сеанс консультаций, чтобы изменить цену этого сеанса, однако я хотел бы разрешить всем пользователям 30 дней покидать сеанс до того, как новая цена повлияет на цену для всех участников, которые в настоящее время зарегистрированы для сессия. Моя первая мысль состоит в том, чтобы использовать хранилище очереди и установить тайм-аут видимости для 30-дневного ограничения времени, но похоже, что это может привести к быстрому увеличению очереди с течением времени, особенно если сообщение не должно работать в течение 30 дней; не говоря уже о проблемах с заказом. Я также смотрю на планировщик задач, но изменения ценообразования сессии не являются повторяющейся концепцией, а более случайными. Является ли идея очереди хорошим подходом или есть лучший и эффективный способ ее достижения?Задачи, которые необходимо выполнить в определенную дату в Azure
ответ
Я думаю, что этот сценарий более подходит для использования Azure Scheduler. Программно создайте задание с однократным повторением с установленной датой, как 30 дней спустя, чтобы запустить один раз. После того, как это задание автоматически запускается планировщиком, назначьте действие для обратного вызова одному из ваших API/Служб, чтобы сделать другие необходимые обновления, а также удалить это задание из планировщика, как часть этого действия, чтобы иметь список чистой работы. В любом случае премиальный план Azure Scheduler Job Collection предоставит вам неограниченное количество заданий для запуска.
Надеется, что это именно то, что вы искали ...
Здесь вы можете увидеть границы Планировщика Azure - https://github.com/Azure/azure-content/blob/master/articles/scheduler-plans-billing.md –
я бы рассмотреть возможность использования Azure WebJobs. WebJob в основном дает вам возможность запуска консольного приложения .NET в контексте Azure Web App. Его можно запускать по требованию, непрерывно или в ответ на повторное расписание. Если ваши требования к обработке низки и позволяют это, они также могут работать в том же процессе, в котором работает ваше веб-приложение, чтобы сохранить вас $$$, поскольку они свободны таким образом.
Вы можете запланировать запуск WebJob один или два раза в день и проанализировать ситуацию и отреагировать как это необходимо. Так как это действительно просто рабочая роль .NET, у вас есть максимальная гибкость.
Все, что вы пытаетесь сделать, должно выполняться с помощью реляционной базы данных. Вы можете использовать временные метки для записи, когда цены на сеанс изменились. Я бы не использовал для этого очередь. Очередь больше предназначена для передачи сообщений в распределенной системе. Ваша проблема заключается в том, чтобы отслеживать, какие цены изменились на каких сеансах и когда. Эти данные должны быть смоделированы в базе данных.
Этот подход кажется, что он был бы самым чистым, но в лазурной среде мне все равно не нужно будет использовать планировщик для запуска каждый день, чтобы найти все изменения? – user1790300
Основываясь на вашем комментарии, «изменения цены сеанса не являются повторяющейся концепцией, а более случайными» - похоже, что люди будут использовать ваш API для получения информации о ценах в произвольные моменты времени. Я предлагаю использовать кеш для кэширования текущих цен и иметь шаблон для чтения, чтобы пересчитать новые цены, если срок действия кеша истек. После того, как вы пересчитаете новые цены, верните их в кеш, чтобы их можно было быстро получить при следующем вызове. Тайм-аут, установленный в кеше, должен отражать максимальное количество времени, которое вы хотите использовать, не перераспределяя последние цены, несколько часов в день, вероятно, хорошо. –
Обратите внимание, что максимальное количество сообщений TTL в Azure Queues составляет 7 дней. –
Я заметил, что также в статье сравниваются очереди хранения очереди и очереди служебной шины. В этом случае моя единственная доступная опция для размещения задания в таблице базы данных и проверки каждый день? Этот подход кажется утечкой ресурсов в базе данных. – user1790300