首页 > 解决方案 > Nifi工件可见性/依赖管理

问题描述

我有两个依赖管理问题。

让我们看这个例子:

重要说明是我想为两个处理器使用相同的 CustomCacheService 实例。

第一个问题是处理器的 GUI 列表中标准工件的重复: 由于两个处理器都必须将依赖项导入到 CustomCacheService,因此它们都需要在 -nar pom.xml 中使用此依赖项

<dependency>
    <groupId>org.apache.nifi</groupId>
    <artifactId>nifi-standard-services-api-nar</artifactId>
    <type>nar</type>
</dependency>
    

如果没有此依赖项构建将失败并出现错误:无法创建扩展文档添加此依赖项后,将为两个处理器创建标准 nifi 工件的副本。重复工件的捆绑 ID 是处理器 groupId - 工件(com.example.processor - querycustomcache/ loadcustomcache)和版本是我的项目版本(例如:1.0.0-SNAPSHOT) Nifi 在其代码中导入了此依赖项,显然不会导致重复的工件。

第二个也是更重要的问题是我无法在处理器之间共享 CustomCacheService。 一旦我将服务依赖项导入两个处理器并将其加载到 nifi 中,在服务列表中,我将为此服务提供三个捆绑选项:

每个处理器都希望从它自己的包中获得一个服务实例。QueryCustomCache 处理器需要来自 com.example.processor.querycustomcache 的服务实例,并且看不到任何其他实例。LoadCustomCache 处理器也是如此。这使我无法为两个处理器使用相同的 CustomCacheService 实例。我希望能够创建带有捆绑 ID com.example.service.customcacheservice 的 CustomCacheService 实例并在两个处理器中使用它。

这两个问题密切相关。我的依赖项的组织方式与 nifi 源代码中的相同。

标签: mavenapache-nifi

解决方案


很好地解释你的情况:

https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.0.1/bk_developer-guide/content/nars.html

注意Nar-Dependency-Idmanifest.mf 中的元素

简而言之:在您的处理器中,您必须导入服务的接口而不是实现


推荐阅读