отправить письмо, когда PutSQL не удалось - PullRequest
0 голосов
/ 30 мая 2019

Я хочу отправить электронное письмо, когда PutSQL не удалось, PutSQL Rollback on Failure=true, так как исходный код не поддерживает отправку электронного письма, когда PutSQL не удалось, поэтому я добавляю отношение REL_ALERT. Я добавляю трехстрочный код для отправки электронной почты при сбое PutSQL, но ни одна из них не работает.

enter image description here enter image description here enter image description here

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете направить потоковый файл к нескольким взаимосвязям (подробнее см. Руководство разработчика Apache NiFi - Маршрут на основе содержимого (от одного до многих) ). Я не уверен, что вы говорите, что хотите откат при неудаче быть true , или если вы не поняли, вы можете изменить его на false .

Если вам необходимо, чтобы откат при сбое был истинным И для получения оповещения по электронной почте, у вас есть несколько вариантов:

  • Измените исходный код PutSQL, чтобы клонировать потоковый файл, и отправьте его в отношение alert, как указано выше. Вам нужно будет использовать код, подобный RouteOnContent (см. Ниже).
  • Зарегистрируйте приложение для входа в журнал электронной почты в $NIFI_HOME/conf/logback.xml, которое получает события журнала WARN или ERROR уровня от org.apache.nifi.processors.standard.PutSQL

Пример кода для маршрутизации потокового файла к нескольким отношениям

final Relationship firstRelationship = destinations.iterator().next();
destinations.remove(firstRelationship);

for (final Relationship relationship : destinations) {
    FlowFile clone = session.clone(flowFile);
    clone = session.putAttribute(clone, ROUTE_ATTRIBUTE_KEY, relationship.getName());
    session.getProvenanceReporter().route(clone, relationship);
    session.transfer(clone, relationship);
    logger.info("Cloning {} to {} and routing clone to {}", new Object[]{flowFile, clone, relationship});
}

flowFile = session.putAttribute(flowFile, ROUTE_ATTRIBUTE_KEY, firstRelationship.getName());
session.getProvenanceReporter().route(flowFile, firstRelationship);
session.transfer(flowFile, firstRelationship);
logger.info("Routing {} to {}", new Object[]{flowFile, firstRelationship});
...