Я работаю над добавлением SMS-уведомлений в веб-приложение C #. В двух словах, пользователь входит в интерфейс, набирает сообщение, выбирает получателей и сохраняет их. Я использую Hangfire для ускорения фоновых заданий - эти задания обрабатывают фактическое здание, а затем отправляют SMS-сообщения через провайдера (в настоящее время Nexmo).
Nexmo, а также большинство других провайдеров SMS,есть API в их API, который ограничивает возможность ставить в очередь исходящие сообщения до скорости X / сек, причем скорость варьируется в зависимости от уровня вашей учетной записи. В целях тестирования я ограничиваюсь 1 / сек.
В настоящее время, когда начинается мой фоновый процесс, я отслеживаю количество времени, которое прошло между вызовами API, и, если оно меньше 1 сек, яположить поток спать на количество оставшегося времени. Кажется, это работает довольно хорошо, однако проблема, с которой я сталкиваюсь, заключается в том, что существует возможность одновременной работы нескольких параллельных фоновых процессов, например, когда два пользователя запускают исходящие SMS-сообщения нав то же время. Есть еще одна сложность, при которой, если вы используете 2 исходящих номера, ваши ограничения API фактически удваиваются (1 сообщение в секунду из каждого используемого номера). Я игнорирую это в настоящее время и просто откладываю между всеми вызовами API.
Я ищу любой совет о том, как обойти эту проблему. Моя единственная идея состоит в том, чтобы полностью отделить обработку сообщений от фонового задания - с помощью задания зависания, просто создавшего сообщения и помечающего их как очереди для отправки, и отдельного однопоточного приложения, которое выступает в основном как наблюдатель и отправляет сообщения FIFO. .
любые предложения будут оценены!