Подтвердить что ты не робот

Фоновые задачи в Метеор

Мне интересно, есть ли способ реализовать фоновый такс, возможно, с пулом работников. Можете ли вы показать мне направление, я думаю о написании пакета для этого?

4b9b3361

Ответ 1

Обновление 2019

Прежде чем думать о написании пакета для чего-либо, сначала посмотрите, существуют ли пакеты, которые делают то, что вам нужно. В мире Метеор это означает, что нужно искать в Атмосфере пакеты "работа/очередь/задача/управление работником/планирование", а затем npm для тех же условий поиска. Вам также необходимо более точно определить ваши требования:

  • Вы хотите постоянство, или будет работать решение в памяти?
  • Вы хотите иметь возможность распределять рабочие места на разные машины?

Метеор конкретных

  • Job-collection - надежный (я использовал его в 2014 году на производстве при запуске), но в настоящее время в режиме обслуживания. Позволяет запланировать постоянные задания для запуска в любом месте (серверы, клиенты).
  • SteveJobs - активно поддерживается Максом Савином, автором нескольких мощных инструментов Meteor
  • littledata: synced-cron - "Простая система cron для Meteor. Она поддерживает синхронизацию заданий между несколькими процессами".

Брошенные пакеты:

Пакеты Npm

Meteor уже несколько лет может использовать пакеты npm напрямую, поэтому этот вопрос сводится к поиску пакетов управления заданиями/работниками/очередями в NPM. Если вас не волнует настойчивость:

  • Async "предоставляет около 70 функций, которые включают в себя обычные" функциональные "подозреваемые (map, reduce, filter, each...), а также некоторые общие шаблоны для асинхронного потока управления (parallel, series, waterfall...)"
  • d3-queue - минималистичный, написанный автором D3 Майком Бостоком

Если вы хотите сохранить постоянство, так как Meteor уже использует MongoDB, может быть выгодно использовать пакет планирования заданий с сохранением в MongoDb. Кажется, самой мощной и популярной является программа "Повестка дня", но, к сожалению, она не поддерживалась месяцами и имеет значительное отставание в решении проблем.

Если вы хотите добавить в свой проект зависимость, поддерживаемую redis, есть несколько вариантов:

Как и MongoDB, Redis также может обеспечивать высокую доступность (через Redis Sentinel), и если вы хотите распределить задания между несколькими рабочими машинами, вы можете направить их все на один сервер Redis.

Ответ 2

Существует пакет, основанный на заданиях Cron, которые могут использоваться для планирования задач на определенные интервалы или даты. Вот пакет: https://atmosphere.meteor.com/package/cron

И если вам придётся заглянуть в источник этого пакета, вы заметите, что они просто используют:

Meteor.setInterval( ... , delay );

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

Ответ 3

Если вы ищете что-то, что характерно для Метеор, я рад поделиться тем, что есть новый пакет под названием Стив Джобс. Это облегчает выполнение фоновых заданий, как вызов метода.

Он имеет все стандартные функции, которые вы ожидаете, например, запуск задания только один раз, повторная попытка неудачных заданий и т.д. Вы можете узнать больше об этом на GitHub:

http://github.com/msavin/stevejobs

Ответ 4

Я предполагаю, что правильная поддержка включена в их дорожную карту, но тем временем мне удалось запустить ее с помощью setInterval. См. Пакет cron-tick.