Apache NiFi 2.1.0自定义处理器无法显示RedisConnectionPool列表
- Apache NIFI 2.1.0
- JDK: OpenJDK 21.0.2
我正在为Apache NiFi 2.1.0开发自定义处理器JJMyRedisProcessor,Redis属性部分直接复用了内置处理器PutRedisHashRecord中org.apache.nifi.redis.util.RedisUtils.REDIS_CONNECTION_POOL的代码。
执行mvn clean compile package生成nar文件并放入NiFi的nar_extensions目录后,测试发现:内置的PutRedisHashRecord处理器的“Redis Connection Pool”下拉框能正常显示已配置的RedisConnectionPool列表,但自定义处理器的对应下拉框没有任何可用选项。
请问该差异产生的原因是什么?如何修复自定义处理器?
自定义处理器的NAR包未正确声明对Redis连接池服务API的依赖,导致NiFi框架无法识别处理器与RedisConnectionPool服务的关联关系,因此下拉框无法加载已配置的连接池实例。而内置处理器所在的NAR包已正确包含该依赖,所以能正常显示选项。
1. 调整pom.xml依赖配置
在自定义处理器的pom.xml中,添加对Redis连接池API的依赖,并设置provided范围(避免与NiFi核心包冲突):
<dependency> <groupId>org.apache.nifi</groupId> <artifactId>nifi-redis-api</artifactId> <version>2.1.0</version> <scope>provided</scope> </dependency>
2. 确保NAR包正确打包服务API
如果项目采用分模块结构(如处理器模块+NAR模块),需在NAR模块的pom.xml中,将nifi-redis-api添加到nar-dependencies中:
<build> <plugins> <plugin> <groupId>org.apache.nifi</groupId> <artifactId>nifi-nar-maven-plugin</artifactId> <version>2.1.0</version> <extensions>true</extensions> <configuration> <narDependencies> <narDependency> <groupId>org.apache.nifi</groupId> <artifactId>nifi-redis-api</artifactId> </narDependency> </narDependencies> </configuration> </plugin> </plugins> </build>
3. 重新编译部署
执行mvn clean compile package重新生成NAR包,替换NiFinar_extensions目录中的旧包,重启NiFi服务后测试即可。
内容的提问来源于stack exchange,提问作者wureka

