Apache nifi 如何从依赖项使用控制器服务api

Apache nifi 如何从依赖项使用控制器服务api,apache-nifi,Apache Nifi,我有一个自定义控制器服务,我想与ConnectWebSocket处理器一起使用。控制器服务依赖于nifi websocket服务api,不需要自定义api(我的客户控制器服务api文件夹为空)。我已经为控制器服务编写了一个测试,它正在通过 但是,我无法选择控制器服务,因为ConnectWebSocket仅接受来自nifi websocket服务api nar的控制器服务api 我希望避免重新编码整个ConnectWebSocket处理器。所以我的问题是: 是否可以配置依赖项,以便我的自定义控制

我有一个自定义控制器服务,我想与
ConnectWebSocket
处理器一起使用。控制器服务依赖于nifi websocket服务api,不需要自定义api(我的客户控制器服务api文件夹为空)。我已经为控制器服务编写了一个测试,它正在通过

但是,我无法选择控制器服务,因为
ConnectWebSocket
仅接受来自
nifi websocket服务api nar
的控制器服务api

我希望避免重新编码整个
ConnectWebSocket
处理器。所以我的问题是:

是否可以配置依赖项,以便我的自定义控制器服务使用来自
nifi websocket服务api nar
的api

控制器服务的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>

4.0.0
com.mydomain
nifi控制器服务包
1.9.2
nifi控制器服务
罐子
org.apache.nifi
nifi api
假如
org.apache.nifi
nifi处理器utils
1.9.2
编译
org.apache.nifi
nifi websocket服务api
1.9.2
假如
org.apache.nifi
nifi websocket服务码头
1.9.2
假如
org.apache.nifi
nifi ssl上下文服务api
假如

控制器服务的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>

4.0.0
com.mydomain
nifi控制器服务包
1.9.2
nifi控制器服务nar
1.9.2
纳尔
真的
真的
com.mydomain
nifi控制器服务
1.9.2
org.apache.nifi
nifi api
假如
org.apache.nifi
nifi websocket服务码头
1.9.2
纳尔
根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>

4.0.0
org.apache.nifi
nifi-nar束
1.9.2
com.mydomain
nifi控制器服务包
1.9.2
聚甲醛
尼菲通讯
尼菲康姆纳酒店

这应该是处理器和控制器服务工作的标准方式

处理器依赖于来自服务API NAR的接口,控制器服务实现实现了该接口。然后,框架知道该接口的所有实现,该接口允许is提供可能使用的服务

如果没有看到您的项目和POM,很难说问题出在哪里,但很可能是一个依赖性问题。您的项目结构应该有两个Maven模块,一个模块为您的服务impl生成一个jar,让我们调用这个定制服务,然后一个模块打包NAR,让我们调用这个定制服务NAR

定制服务模块应该提供对nifi websocket services api的依赖,这允许它进行编译,但我们不希望捆绑该api,因为在运行时它将来自另一个NAR

自定义服务nar模块在nifi websocket服务api nar上应该具有nar类型的依赖项


这应该是处理器和控制器服务工作的标准方式

处理器依赖于来自服务API NAR的接口,控制器服务实现实现了该接口。然后,框架知道该接口的所有实现,该接口允许is提供可能使用的服务

如果没有看到您的项目和POM,很难说问题出在哪里,但很可能是一个依赖性问题。您的项目结构应该有两个Maven模块,一个模块为您的服务impl生成一个jar,让我们调用这个定制服务,然后一个模块打包NAR,让我们调用这个定制服务NAR

定制服务模块应该提供对nifi websocket services api的依赖,这允许它进行编译,但我们不希望捆绑该api,因为在运行时它将来自另一个NAR

自定义服务nar模块在nifi websocket服务api nar上应该具有nar类型的依赖项


我将pom文件添加到我的问题中。我有您描述的设置依赖项。自定义控制器服务显示在“控制器服务”选项卡中,但它不显示在ConnectWebSocket处理器的控制器服务设置中。POM未按我所述进行设置。。。在控制器服务pom中,nifi websocket服务api必须是提供的范围,而不是编译。。。在控制器服务nar pom中,您需要nifi websocket服务jetty nar上的nar依赖项,删除所有具有nar的依赖项在删除具有nar的其他依赖项后,我从nifi日志中获取java.lang.NoClassDefFoundError:org/apache/nifi/ssl/RestrictedSSLContextService pom看起来正确,RestrictedSSLContext服务来自nifi标准服务api nar,它应该位于您设置的链中。。。控制器服务nar->nifi websocket jetty nar->nifi websocket api nar->nifi标准服务api NARC您可以将异常的堆栈跟踪添加到问题中吗?我将pom文件添加到问题中。我有您描述的设置依赖项。自定义控制器服务显示在“控制器服务”选项卡中,但它不显示在ConnectWebSocket处理器的控制器服务设置中。POM未按我所述进行设置。。。在控制器服务pom中,nifi websocket服务api必须是提供的范围,而不是编译。。。在控制器服务nar pom中,您需要nifi websocket服务jetty nar上的nar依赖项,删除所有具有nar的依赖项在删除具有nar的其他依赖项后,我会从nifi日志中获得java.lang.NoClassDefFoundError:org/apache/nifi/ssl/RestrictedSSLContextService pom看起来正确,Restricte