Отправьте электронное письмо, когда в моем errorChannel будут получены ошибки с использованием Spring интеграции DSL - PullRequest
0 голосов
/ 02 июня 2019

Я занимаюсь разработкой API в Spring-интеграции с использованием DSL, вот как это работает

Адаптер опроса JDBC инициирует поток, получает некоторые данные из таблиц и отправляет их в DefaultRequestChannel, отсюда сообщение обрабатывается / передается по различным каналам.

Теперь я пытаюсь
1. отправьте электронное письмо, если в моем канале ошибок / обнаружены какие-либо ошибки (например, проблема с подключением, обнаружена плохая запись при опросе данных).

  1. После отправки письма в мою группу поддержки я хочу приостановить поток на 15 минут, а затем возобновить его автоматически.

Я попытался создать sendEmailChannel (получатель моего errorChannel), у меня это не работает. Так что просто создали метод трансформатора, как показано ниже

этот код работает нормально, но это хорошая практика? @

@Transformer(inputChannel="errorChannel", outputChannel="suspendChannel")
public Message<?> errorChannelHandler(ErrorMessage errorMessage) throws RuntimeException, MessagingException, InterruptedException {

Exception exception = (Exception) errorMessage.getPayload();
    String errorMsg = errorMessage.toString();
    String subject = "API issue";
    if (exception instanceof RuntimeException) {
        errorMsg = "Run time exception";
        subject = "Critical Alert";
    }
    if (exception instanceof JsonParseException) {
        errorMsg = ....;
        subject = .....;
    }

    MimeMessage message = sender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message);
    helper.setFrom(senderEmail);
    helper.setTo(receiverEmail);
    helper.setText(errorMsg);
    helper.setSubject(subject);
    sender.send(message);
    kafkaProducerSwitch.isKafkaDown());
    return MessageBuilder.withPayload(exception.getMessage())

            .build();
}

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

1 Ответ

0 голосов
/ 03 июня 2019

Вы определенно можете использовать адаптер канала отправки почты из ящика Spring Integration для отправки этих сообщений из канала ошибки: https://docs.spring.io/spring-integration/docs/5.1.5.RELEASE/reference/html/#mail-outbound. Вариант Java DSL выглядит следующим образом:

.handle(Mail.outboundAdapter("gmail")
                        .port(smtpServer.getPort())
                        .credentials("user", "pw")
                        .protocol("smtp")))

Приостановка может быть осуществлена ​​с помощью расширения CompoundTriggerAdvice, когда вы проверяете компонент bean AtimocBoolean на состояние для активации того или иного триггера в реализации beforeReceive(). Такой AtimocBoolean может изменить свое состояние еще у одного подписчика на errorChannel, потому что по умолчанию это PublishSubscribeChannel. Не забудьте вернуть состояние в нормальное состояние, после чего вы вернете false из beforeReceive(). Просто потому, что этого достаточно, чтобы пометить вашу систему как нормальную в данный момент, поскольку она заработает только через 15 минут.

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