apache-nifi - 如何使用依赖项中的控制器服务 api
问题描述
我有一个要与ConnectWebSocket
处理器一起使用的自定义控制器服务。控制器服务依赖nifi-websocket-services-api
且不需要自定义 api(my-customer-controller-service-api 文件夹为空)。我已经为控制器服务编写了一个测试,它正在通过。
但是我无法选择控制器服务,因为ConnectWebSocket
只接受来自nifi-websocket-service-api-nar
.
我想避免重新编码整个ConnectWebSocket
处理器。所以我的问题是:
是否可以配置依赖项,以便我的自定义控制器服务使用来自的 api nifi-websocket-service-api-nar
?
控制器服务的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mydomain</groupId>
<artifactId>nifi-controllerservice-bundle</artifactId>
<version>1.9.2</version>
</parent>
<artifactId>nifi-controllerservice</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- normal dependencies -->
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-processor-utils</artifactId>
<version>1.9.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-websocket-services-api</artifactId>
<version>1.9.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-websocket-services-jetty</artifactId>
<version>1.9.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-ssl-context-service-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Test dependencies -->
</dependencies>
控制器服务 nar 的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mydomain</groupId>
<artifactId>nifi-controllerservice-bundle</artifactId>
<version>1.9.2</version>
</parent>
<artifactId>nifi-controllerservice-nar</artifactId>
<version>1.9.2</version>
<packaging>nar</packaging>
<properties>
<maven.javadoc.skip>true</maven.javadoc.skip>
<source.skip>true</source.skip>
</properties>
<dependencies>
<dependency>
<groupId>com.mydomain</groupId>
<artifactId>nifi-controllerservice</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-websocket-services-jetty</artifactId>
<version>1.9.2</version>
<scope>nar</scope>
</dependency>
</dependencies>
</project>
根 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-nar-bundles</artifactId>
<version>1.9.2</version>
</parent>
<groupId>com.mydomain</groupId>
<artifactId>nifi-controllerservice-bundle</artifactId>
<version>1.9.2</version>
<packaging>pom</packaging>
<modules>
<module>nifi-comtom</module>
<module>nifi-comtom-nar</module>
</modules>
</project>
解决方案
这应该是处理器和控制器服务工作的标准方式......
处理器依赖于来自服务 API NAR 的接口,控制器服务实现实现该接口。然后,框架知道该接口的所有实现,从而允许提供可以使用的可能服务。
如果没有看到您的项目和 poms,很难说出问题所在,但很可能是依赖问题。您的项目结构应该有两个 Maven 模块,一个为您的服务 impl 生成一个 jar,我们称之为自定义服务,然后一个打包 NAR,我们称之为自定义服务-nar。
自定义服务模块应该对 nifi-websocket-services-api 提供依赖,这允许它编译,但我们不想捆绑该 API,因为在运行时它将来自另一个 NAR。
custom-service-nar 模块应该对 nifi-websocket-services-api-nar 具有 NAR 类型的依赖项。
推荐阅读
- php - 按数字和字母的自定义字段对帖子进行排序(组合)
- c# - 主菜单未加载分配的正确权限(C#)
- firebase - Firebase用户注册时不保存到数据库
- memory - 即使有足够的可用字节,Malloc 也无法分配字节
- python - 循环写入CSV时如何避免重复标题?
- javascript - 如何在 Anime.js 中按照 SVG 路径“完美”居中对象?
- r - 如何在 R 中为“WorldPhones”数据集创建折线图?
- c++ - 为什么我的模板会导致重复符号?
- amazon-s3 - 如何在使用 Athena 连接器运行 Tableau 时将自动生成的文件存储在不同的 AWS S3 文件夹中?
- c++ - 检测哪个窗口在其他实例中具有焦点并向其发布带有 CString 参数的消息