如何创建自定义 NiFi 控制器服务?
How to create a custom NiFi Controller Service?
我正在尝试学习如何创建自定义 NiFi 控制器服务。首先,我想通过简单地复制 DBCPConnectionPool
服务的原始源代码来模仿 DBCPConnectionPool
控制器服务。为了实现相同的目的,我从“nifi-service-bundle-archetype”生成了一个 Maven 原型,并获得了以下项目结构
但是,当我从 'nifi-processor-bundle-archetype 生成原型时,我得到了以下结构:-
我知道在处理器的情况下,我只需要在 nifi-ListDbTableDemo-processors
文件夹下的 MyProceesor.java
中编写我的代码,然后从中创建一个 nar 文件。但是在控制器服务的情况下,我生成了 4 个文件夹。我可以看到两个 java 文件,即
StandardMyService.java
存在于 nifi-DbcpServiceDemo
文件夹下
MyService.java
存在于 nifi-DbcpServiceDemo-api
文件夹下
现在,为什么自定义控制器服务生成两个 java 文件,而自定义处理器只生成一个 java 文件。此外,由于我试图模仿 DBCPConnectionPool
服务,其中 java 文件中的两个我应该复制 DBCPConnectionPool
服务的原始源代码。
请从头开始指导我创建与 DBCPConnectionPool
服务等效的自定义服务所需遵循的步骤。
nifi-DbcpServiceDemo-api
下的MyService.java
是nifi-DbcpServiceDemo
下的StandardMyService.java
实现的接口。实施完成后,您必须使用 nifi-DbcpServiceDemo-api
作为需要与此自定义控制器服务一起使用的处理器包中的依赖项。
控制器服务这样实现的原因是:
- 我们将从处理器包中隐藏实际实现,因为它不需要依赖于实现。
- 明天你写一个新的控制器服务实现,比如
StandardMyServiceTwo
它再次实现 MyService
因为只有实现与 StandardMyService
不同,其他成员保持不变并且可以共享。这种新的控制器服务可以透明地引入,而无需对处理器包进行任何更改。
示例:
最好的例子是记录reader/writer控制器服务。如果您查看 nifi-record-serialization-services-bundle in nifi, they have different implementation for serializing records of JSON, Grok, avro, CSV data formats but they all are actually implementing one API - nifi-record-serialization-service-api 并且因此对于想要使用 Record Reader
或 Record Writer
的处理器,而不是将实际实现作为其依赖项,他们宁愿使用 api作为它的依赖。
所以明天您可以在 record-serialization-services-bundle 中为新的数据格式添加一个新的实现,而无需触及处理器包上的任何内容。
作为参考,请查看以下链接,这将帮助您从头开始编写自定义控制器服务
我正在尝试学习如何创建自定义 NiFi 控制器服务。首先,我想通过简单地复制 DBCPConnectionPool
服务的原始源代码来模仿 DBCPConnectionPool
控制器服务。为了实现相同的目的,我从“nifi-service-bundle-archetype”生成了一个 Maven 原型,并获得了以下项目结构
但是,当我从 'nifi-processor-bundle-archetype 生成原型时,我得到了以下结构:-
我知道在处理器的情况下,我只需要在 nifi-ListDbTableDemo-processors
文件夹下的 MyProceesor.java
中编写我的代码,然后从中创建一个 nar 文件。但是在控制器服务的情况下,我生成了 4 个文件夹。我可以看到两个 java 文件,即
StandardMyService.java
存在于nifi-DbcpServiceDemo
文件夹下MyService.java
存在于nifi-DbcpServiceDemo-api
文件夹下
现在,为什么自定义控制器服务生成两个 java 文件,而自定义处理器只生成一个 java 文件。此外,由于我试图模仿 DBCPConnectionPool
服务,其中 java 文件中的两个我应该复制 DBCPConnectionPool
服务的原始源代码。
请从头开始指导我创建与 DBCPConnectionPool
服务等效的自定义服务所需遵循的步骤。
nifi-DbcpServiceDemo-api
下的MyService.java
是nifi-DbcpServiceDemo
下的StandardMyService.java
实现的接口。实施完成后,您必须使用 nifi-DbcpServiceDemo-api
作为需要与此自定义控制器服务一起使用的处理器包中的依赖项。
控制器服务这样实现的原因是:
- 我们将从处理器包中隐藏实际实现,因为它不需要依赖于实现。
- 明天你写一个新的控制器服务实现,比如
StandardMyServiceTwo
它再次实现MyService
因为只有实现与StandardMyService
不同,其他成员保持不变并且可以共享。这种新的控制器服务可以透明地引入,而无需对处理器包进行任何更改。
示例:
最好的例子是记录reader/writer控制器服务。如果您查看 nifi-record-serialization-services-bundle in nifi, they have different implementation for serializing records of JSON, Grok, avro, CSV data formats but they all are actually implementing one API - nifi-record-serialization-service-api 并且因此对于想要使用 Record Reader
或 Record Writer
的处理器,而不是将实际实现作为其依赖项,他们宁愿使用 api作为它的依赖。
所以明天您可以在 record-serialization-services-bundle 中为新的数据格式添加一个新的实现,而无需触及处理器包上的任何内容。
作为参考,请查看以下链接,这将帮助您从头开始编写自定义控制器服务