Что лучше для уведомления об ошибках по электронной почте - PullRequest
0 голосов
/ 04 декабря 2009

Этот вопрос не зависит от языка.

У меня есть приложение, которое обрабатывает запросы в цикле. Во время этого цикла для каждого запроса выполняется несколько действий. Эти действия находятся внутри блоков try / catch / log. Сейчас я расширяю это, чтобы уведомить администраторов о серьезных ошибках по электронной почте.

Это все очень легко, за исключением одной вещи. Мы полагаемся на то, что клиенты / клиенты реализуют свою собственную избыточность доставки электронной почты, и я знаю из опыта, что всегда будет один клиент, у которого только один SMTP-сервер обмена, и это неизбежно будет время от времени падать.

Итак, вот дилемма:

Сценарий 1 (не обрабатывать ошибку во время неудачной отправки) - когда я отправляю электронное письмо администратору, а SMTP не работает, он разрывает приложение (приложение прекращает работу, а дополнительные циклы прекращают обработку, поскольку ошибка необработанный) Это означает, что сообщение об ошибке, которое должно было быть полезным для приложения, внезапно становится причиной того, что запросы 99/100 не обрабатываются, поскольку возникла проблема с запросом 1.

Сценарий 2 (обработать исключение во время неудачной отправки) - это означает, что я окружаю код отправки в блоках try / catch / log, отлично! приложение обрабатывает все запросы 99 из них, кроме одного, но администратор теперь не имеет уведомления об этой одной ошибке по электронной почте, потому что при попытке отправить SMTP не работает, и эта ошибка была просто записана в журнал приложения, администратор, который не Не проверяйте этот журнал в течение нескольких дней (даже недель), и теперь нет никакой возможности узнать, что произошла ошибка.

Итак, есть ли способ выиграть / выиграть, чтобы решить эту проблему, или я всегда буду в растерянности, и во власти SMTP. Помните, что мы не можем управлять резервированием почтового сервера.

Ответы [ 2 ]

2 голосов
/ 04 декабря 2009

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

1 голос
/ 04 декабря 2009

Я бы предположил, что «беспроигрышный» способ состоит в том, чтобы иметь администратора сервера, который фактически управляет сервером, а не того, который полностью недоступен, когда его почтовый сервер не работает, и не потрудитесь проверить это позже, чтобы видеть, пропустил ли он какие-либо уведомления.

...