Поток Spring Integration для обработки / отправки электронной почты занимает несколько часов для некоторых сообщений - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть приложение весенней интеграции, которое преобразует сообщения с помощью Freemarker и отправляет сообщение на SMTP-сервер.Он работал нормально на производстве почти год.Сам процесс не велик, адаптер-управляемый сообщениями канал читает сообщение, freemarker преобразует сообщение, а EmailAdapter отправляет электронное письмо.

Раньше отправка электронной почты после получения сообщения из MQ занимала около 100 мс.Однако за последние несколько недель 10% сообщений занимают более 12 часов между чтением сообщений из MQ и получением в EmailAdapter, остальные 90% (аналогичные) сообщения все еще обрабатываются в течение 100 мс.

<!-- Email -->
<!-- Split message into separate email messages for delivery -->
<splitter id="EmailSplitter"
    input-channel="EmailDeliveryChannel"
    output-channel="EmailDeliveryProcessChannel" method="split">
    <beans:bean
        class="com.ne.splitter.EmailSplitter">
        <beans:property name="mailSender"
            ref="MailSender" />
    </beans:bean>
</splitter>

<!-- Added task executor to handler messages in dedicated threads. Otherwise one failed email delivery will fail all split messages. -->
<channel id="EmailDeliveryProcessChannel">
    <dispatcher
        task-executor="SplitDeliveryExecutor" />
</channel>

<task:executor id="RequestTaskExecutor"
    pool-size="2-100"
    queue-capacity="500"
    keep-alive="1" />

<task:executor
    id="SplitDeliveryExecutor"
    pool-size="3-200"
    queue-capacity="1000" />

<service-activator
    input-channel="EmailDeliveryProcessChannel"
    output-channel="EmailDeliveryStatusChannel" method="send">

    <beans:bean
        class="com.ne.adapters.EmailAdapter">
        <beans:property name="mailSender"
            ref="MailSender" />
        <beans:property name="retryAttempts" value="3" />
    </beans:bean>
</service-activator>

Почему некоторые сообщения застряли в процессе более чем на 10 часов и не вышли из строя?

1 Ответ

0 голосов
/ 23 сентября 2018

Было бы полезно включить отладку для категории org.springframework.integration и проанализировать журналы на наличие шагов, в которых застряли сообщения.Вы можете собрать историю сообщений для них через WireTap и где-нибудь предупредить.См. Документы о них: https://docs.spring.io/spring-integration/docs/5.0.8.RELEASE/reference/html/system-management-chapter.html#message-history.

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

Вы можете рассмотреть возможность размещения QueueChannel перед тем, как адаптер электронной почты для буферизации сообщений для дальнейшей обработки не влияет на весь поток и не блокируетПоток пользователей JMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...