Как создать пользовательский сервис контроллеров NiFi?

Я пытаюсь узнать, как создать собственный сервис контроллера NiFi. Для начала я подумал о том, чтобы подражать DBCPConnectionPool служба контроллера, просто скопировав исходный код DBCPConnectionPool оказание услуг. Чтобы реализовать то же самое, я сгенерировал архетип maven из "nifi- service -bundle-archetype" и получил следующую структуру проекта введите описание изображения здесь

Однако, когда я сгенерировал архетип из 'nifi- processor -bundle-archetype, я получил следующую структуру: введите описание изображения здесь

Я понимаю, что в случае процессора мне просто нужно написать свой код в MyProceesor.java присутствует под nifi-ListDbTableDemo-processors папку, а затем создать файл Nar из него. Но в случае службы контроллера у меня сгенерировано 4 папки. Я вижу два файла Java, т.е.

  1. StandardMyService.java присутствует под nifi-DbcpServiceDemo папка

  2. MyService.java присутствует под nifi-DbcpServiceDemo-api папка

Теперь, почему генерируются два Java-файла в случае пользовательского сервиса контроллера, а в случае специального процессора генерируется только один Java-файл. Кроме того, так как я пытаюсь имитировать DBCPConnectionPool сервис, в котором из двух файлов java следует скопировать исходный код DBCPConnectionPool оказание услуг.

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

1 ответ

Решение

MyService.java под nifi-DbcpServiceDemo-api это интерфейс, который будет реализован StandardMyService.java под nifi-DbcpServiceDemo, Как только реализация будет завершена, вы должны использовать nifi-DbcpServiceDemo-api как зависимость в комплектации процессора, который должен работать с этим пользовательским контроллером службы.

Причина, по которой службы контроллера реализованы таким образом:

  • Мы будем скрывать фактическую реализацию от набора процессоров, потому что это не должно зависеть от реализации.
  • Завтра ты напишешь новую реализацию сервиса контроллера, скажем StandardMyServiceTwo который снова реализует MyService потому что только реализация варьируется от StandardMyService и другие участники остаются прежними и могут быть разделены. Эта новая служба контроллера может быть введена прозрачно без внесения каких-либо изменений в комплект процессора.

Пример:

Лучшим примером являются службы чтения / записи контроллера. Если вы посмотрите на nifi-record-serialization-services-bundle в nifi, они имеют различную реализацию для сериализации записей форматов данных JSON, Grok, avro, CSV, но все они на самом деле реализуют один API - nifi-record-serialization-service -api И, следовательно, для процессоров, которые хотят использовать Record Reader или же Record Writerвместо того, чтобы иметь фактические реализации в качестве своей зависимости, они скорее могут иметь API в качестве своей зависимости.

Таким образом, завтра вы можете добавить новую реализацию в пакет record-serialization-services-services для нового формата данных, не затрагивая ничего в пакете процессоров.

Для ссылок, пожалуйста, взгляните на следующие ссылки, которые помогут вам в написании пользовательского сервиса контроллера с нуля.

Другие вопросы по тегам