Управление одновременными заданиями Playframework

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

  • первое задание быстрое: оно пытается получить два разных URL-адреса с помощью метода WS.url() и записать полученный статус в базу данных. Три попытки сделаны, если веб-сайт не отвечает. Выполнение этой задачи занимает менее 20 секунд и будет выполняться каждые 5 минут.

  • вторая работа медленная: она разбирает контент на обоих сайтах, если их статус записан в базу данных в порядке. Этот процесс занимает около 2 минут и будет выполняться каждый час.

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

2 ответа

Решение состоит в том, чтобы сохранить какой-либо флаг в базе данных (где вы записываете статус), чтобы второе задание обнаруживало, может оно выполняться или нет. Теперь, это было бы решением, но оно могло иметь некоторые проблемы в определенных сценариях.

Учитывая, что оба задания связаны (одно "пингует" URL-адрес, другое анализирует его), первое выполняется очень быстро при выполнении, что (в вашем заданном сценарии) статус, полученный первым заданием, не имеет значения для кого-либо, кроме второго задание и что проверка URL-адреса 12 раз в час, когда вы будете использовать последний результат один раз в час, кажется пустой тратой ресурсов (как на вашем сайте, так и на сайтах, которые вы проверяете), я бы предложил объединить обе задачи в одно задание.

Если у вас есть одна работа, вам больше не придется беспокоиться о параллелизме. Просто запустите его один раз в час.

Если вы хотите сделать это проще, вы можете начать вторую работу в первой..

Ваша последняя строка после проверки обслуживания истекла

new URLParserJob().now();
Другие вопросы по тегам