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