У меня есть приложение весенней интеграции, которое преобразует сообщения с помощью 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 часов и не вышли из строя?