Как создать пользовательский сервис контроллеров NiFi?
Я пытаюсь узнать, как создать собственный сервис контроллера NiFi. Для начала я подумал о том, чтобы подражать DBCPConnectionPool
служба контроллера, просто скопировав исходный код DBCPConnectionPool
оказание услуг. Чтобы реализовать то же самое, я сгенерировал архетип maven из "nifi- service -bundle-archetype" и получил следующую структуру проекта
Однако, когда я сгенерировал архетип из 'nifi- processor -bundle-archetype, я получил следующую структуру:
Я понимаю, что в случае процессора мне просто нужно написать свой код в MyProceesor.java
присутствует под nifi-ListDbTableDemo-processors
папку, а затем создать файл Nar из него. Но в случае службы контроллера у меня сгенерировано 4 папки. Я вижу два файла Java, т.е.
StandardMyService.java
присутствует подnifi-DbcpServiceDemo
папка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 для нового формата данных, не затрагивая ничего в пакете процессоров.
Для ссылок, пожалуйста, взгляните на следующие ссылки, которые помогут вам в написании пользовательского сервиса контроллера с нуля.