Java должен отправлять электронную почту с конфигурацией тайм-аута

Java Java EE

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…

У меня возникла проблема с отправкой электронных писем онлайн, запишите ее.

Во-первых, фон

Однажды Сяо Ван дал мне обратную связь: «Пожалуйста, проверьте статус отправки электронной почты в Интернете, я обнаружил, что отправка не удалась».

Я пошел в БД, чтобы проверить недавнюю ситуацию с отправкой почты, и сказал: «Выглядит нормально, и в сети нет ненормальной ситуации. Может быть, почта накопилась в Redis и не была использована».

select * from email order by id desc limit 100

Во-первых, давайте поговорим об общем способе отправки электронных писем здесь:

处理邮件消息的方式

Какая польза от этого? Думайте о Redis как об очереди сообщений и направляйте все запросы в Redis, что можетотсечение пика. Поток машины A/B/C будет вв пределах определенного интервалаИзвлеките сообщение из Redis, а затем вызовите почтовый интерфейс, чтобы отправить его.

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

  • Текущая логика такова: если отправка в Redis прошла успешно и в Redis не накопилось сообщений (что указывает на то, что машина A/B/C может вовремя обработать электронное письмо), то электронное письмо считается успешно отправленным.

PS: (Если с системой проблем нет, то и с этой реализацией все в порядке.Поскольку количество отправляемых писем, как правило, не слишком велико (Redis не накапливает сообщения), а вероятность успешной отправки писем также достаточно высока..

Возвращаясь к вопросу, из-за вышеуказанного фона я предположил, что это письмо все еще накапливалось в Redis, когда Сяо Ван проверял результаты, поэтому возврат не удался напрямую. Конечно же, я проверил Redis и обнаружил еще 200 писем без новостей.

Поэтому я спросил Сяо Вана: «Сколько писем вы отправили?» Сяо Ван ответил: «500 писем за 20 минут, менее 1 запроса в секунду». Я подумал: «Тогда у нас тут четыре машины, и в принципе столько навалов не будет».

Поэтому я побежал на онлайн-сервер, чтобы посмотреть журналы потребления, и обнаружил, чтотолько одинМашина использует данные Redis. Снова проверил журнал ошибок, чтобы увидеть, много ли сообщений об ошибках,ноЖурнал ошибок не найден...

Итак, я проверил информацию мониторинга машины и не нашел ничего необычного. Тогда возникает вопрос: почему сообщения Redis потребляет только одна машина? Журналы и информация мониторинга остальных трех машин в норме.

2. Решить

Из журнала и информации о машине я не могу судить, что есть какая-то проблема, и тогда я думаю о команде на Java:jstack

Команда jstack в основном используется для просмотра стека вызовов потоков Java и может использоваться для анализа проблем с потоками (таких как взаимоблокировки).

Подробное использование и руководство по jstack:woo woo woo.cn blog on.com/Kong Zhongqi…

Итак, я пошел выполнятьjstackcommand, я искал в информации "Email" и действительно нашел:

发邮件卡住了

Это легко сделать, просто найдите ключевые слова, такие как «Блокировка потока отправки почтового ящика Java», должно быть решение.

解决方案

Наконец, было обнаружено, что он не был настроен при отправке писем.сверхурочное время, вызывая блокировку некоторых потоков при отправке писем (по неизвестным причинам)

  • mail.smtp.connectiontimeout: ограничение времени соединения в миллисекундах. Речь идет о времени установления соединения с почтовым сервером. По умолчанию неограничен.
  • mail.smtp.timeout: ограничение времени получения почты в миллисекундах. Это связано с длительностью получения электронной почты. По умолчанию неограничен.
  • mail.smtp.writetimeout: ограничение времени отправки почты в миллисекундах. О продолжительности загрузки контента при отправке электронного письма. По умолчанию также неограничен.

В конце концов

рад вывестигалантерейные товарыОбщедоступный номер технологии Java:Java3y. В публичном аккаунтеБолее 200 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!

转发到朋友圈是对我最大的支持!

Я думаю, что моя статья хорошо написана, нажмитеотличный!