Нужно отправить SMS, что может быть «проще»?

в 7:11, , рубрики: Apache, CAMEL, sms, алгоритм, Алгоритмы, Веб-разработка, разработка, рассылки, метки: , , , ,

Наконец, в вашем проекте потребовалось организовать рассылку SMS с помощью какой-нибудь службы, работающей через Интернет.

На первый взгляд ничего сложного:

Нужно отправить SMS, что может быть «проще»?

Хм… получился сферический процесс отправки SMS в вакууме.

Очевидно, что должно быть какое-то хранилище/очередь, в котором будут накапливаться исходящие сообщения, и из которого их будет доставать процесс отправки. Пусть это будет «outbox»:

Нужно отправить SMS, что может быть «проще»?

Вспоминаем, что мы используем Интернет-сервис, доступ к которому по определению, да и сама его работа не является абсолютно надежной. Поэтому, в случае возникновения ошибки нужно будет повторить попытку отправки сообщения, вернув его в outbox:

Нужно отправить SMS, что может быть «проще»?

Это что, если не будет связи или какая-то другая ошибка, то отправка будет молотить на полную катушку? Надо сделать отстойник, в котором сообщения будут отдыхать некоторое время, например, минуту. Да и если в outbox вдруг внезапно окажется тысяча сообщений, пусть они отправляются со скоростью 2 раза в секунду, не напрягая сервер:

Нужно отправить SMS, что может быть «проще»?

Хорошо бы следить за тем, что мы уже отправили, добавим sent:

Нужно отправить SMS, что может быть «проще»?

Блин! Если наша система глюкнула и где-то зациклилась, то SMS будут отправляться бесконечно и кто-то получит сотни сообщений на свой телефон, а мы получим счет на круглую сумму. Лучше сделать лимит на отправку сообщений на один и тот же номер для подстраховки.

Нужно отправить SMS, что может быть «проще»?

Да и пытаться повторить попытку отправки на ЛЮБУЮ ошибку — тоже не вариант! А вдруг это ошибка «Out Of Memory», а мы из-за нее начнем слать SMS по кругу, да и наше ограничение лимита не отловит этот случай, т.к. лимит уменьшается только при успешной отправке. Давайте повторно отправлять SMS только при определенных известных нам ошибках, например, невозможности соединиться с сервером отправки:

Нужно отправить SMS, что может быть «проще»?

Теперь процесс выглядит более-менее реалистично. А что использовать в качестве хранилищ «outbox», «bounced», «sent» и т.д.?

База данных — это хорошо, но не сравниться с простотой, удобством и прозрачностью для отладки с простыми теплыми ламповыми файлами…

… а для реализации подойдет проверенный инструмент: Apache Camel.

Автор: TolTol

Поделиться

* - обязательные к заполнению поля