Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.11.2020, 13:54
Новичок на форуме
Отправить личное сообщение для Hellishcode Посмотреть профиль Найти все сообщения от Hellishcode
 
Регистрация: 01.11.2020
Сообщений: 5

Как создать очередь почты с помощью kue?
Добрый день.
Есть письма, которые отправляет пользователь.
При отправке, каждое письмо помещается в базу данных, где ей присваевается номер письма и время добавления в базу.
В отправке писем, есть лимит на минуту, то есть, пользователь не может отправить больше 100 писем в минуту. Если количество писем превышено, то следующее письмо станет в очередь и отправится через минуту и так далее.
Вот часть моего кода.
queue.create(`email`, {
    title: `HELLO KUE 1`,
    id: Math.floor(Math.random() * Math.floor(100)),
    to: 'tj@learnboost.com',
  })
    .save((err) => {
      if (!err) console.log(`error`);
    }
  );

Но я не понимаю, как правильно вызвать queue.process
Вызывать setInterval каждую минуту? Я думал, что у kue есть механизм для этого?
Подскажите пожалуйста, как это можно сделать с помощью kue
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2020, 11:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Hellishcode
Вызывать setInterval каждую минуту? Я думал, что у kue есть механизм для этого?
Не знаю Node, и даже не представляю, что за зверь kue, но такие задачи не скрипт выполняет по таймеру, а вешают их на cron. Он в указанные интервалы времени запускает скрипт, который извлекает из базы, обрабатывает и отправляет.

Но о каких пользователях речь, надо полагать это владелец, а 100 в минуту, это ограничение хоста? А ведь не только это ограничение важно, важны еще и домены, на которые отправляется почта. Если на какой либо почтовый сервер с вашего домена будут пачками отправляться письма каждую минуту, то это большая вероятность того, что ваш домен попадет в итоге в черный список.
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2020, 11:39
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Я тоже, к сожалению, не силен в этой теме, но просто призадумался. Что значит 100 писем в минуту и как их (письма и минуты) считать?
Допустим в интервал от 0 до 30 сек отправлено 10 писем
В интервал от 30 до 60 сек - 60 писем
От 60 до 90 - 60 писем
От 90 до 120 - 10 писем.

Считается ли, что за минуту от 30 до 90 сек отправлено больше 100 писем?
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2020, 13:41
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

О до меня дошло
Сообщение от Hellishcode
каждое письмо помещается в базу данных, где ей присваевается номер письма и время добавления в базу.
Надо смотреть время отправки сотого назад письма (если оно есть).
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2020, 19:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

voraa,
как? Ну неужели, если речь идет о рассылке, вы запустите какой-то скрипт и станете ждать окончания его работы? Сомневаюсь.

Такие вещи обычно отдаются планировщику задач, и к базе он обращается не "к сотому назад", а помещает в базу статус выполнения задачи и время ее последнего выполнения. Вот от этой метки и извлекаются из базы очередные N записей.
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2020, 12:30
Новичок на форуме
Отправить личное сообщение для Hellishcode Посмотреть профиль Найти все сообщения от Hellishcode
 
Регистрация: 01.11.2020
Сообщений: 5

Но не буду же я писать setInterval который будет обращаться к базе? Я думал, что в kue есть подобный механизм - отложенная очередь - или что-то типа того....
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2020, 14:45
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Вощемана нужен RateLimiter

1) Kue is no longer maintained
Please see e.g. Bull as an alternative. Thank you!

2) https://github.com/Automattic/kue/issues/441
https://www.binpress.com/rate-limiting-with-redis-2/

--
Почему kue? Разраб же пишет бери это:
https://github.com/OptimalBits/bull/...RENCE.md#queue
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2020, 14:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Hellishcode
Но не буду же я писать setInterval который будет обращаться к базе? Я думал, что в kue есть подобный механизм
Я не знаю вообще, что такое kue, тем паче что в нем есть. Но рассылка и подобные задачи, это скрипты вызываемые планировщиком. Следовательно на сервере пишут скрипт - диспетчер задач. К нему обращается планировщик. Диспетчер извлекает из таблицы задач задачу (задачи), которые актуальны на текущее время, если статус задачи имеет состояние "не выполнено" и время последнего выполнения задачи. Запускает скрипт (скрипты) задач, которые и обслуживают и рассылку, и прочие задачи. Скрипт занимающийся рассылкой извлекает N записей и базы от последнего времени выполнения задачи. Если более записей не будет, задача выполнена и скрипт пишет в таблицу задач статус "выполнено".

Планировщик задач, это cron, запускаемый в указанные интервалы времени, это может быть каждую минуту, 10 минут, час ... И он есть на каждом уважающем себя хосте, а в панели управления хостом обязательно поясняется как у конкретного хостера запустить из под cron скрипт.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью javascript создать div ? Oggy3010 (X)HTML/CSS 6 06.07.2012 18:55
Как получить URL, в случае совпадения с условиями - создать div? Intruder Общие вопросы Javascript 3 27.05.2012 02:10
Как создать <DIV> рядом с курсором? Kanzaki Элементы интерфейса 8 03.09.2011 14:23
как создать собственную карту как в Google map Khazaryan Общие вопросы Javascript 1 20.03.2011 02:56
как создать елемент с вложеными елементами scuter Events/DOM/Window 11 14.05.2008 16:15