【问题标题】:NiFi custom controller service that has standard controller service reference possible?具有标准控制器服务参考的 NiFi 自定义控制器服务可能吗?
【发布时间】:2021-09-21 23:31:40
【问题描述】:

总的来说,我对 NiFi 比较陌生。我正在开发自定义控制器服务。我还在流程中设置了 cassandra 连接提供程序控制器服务。

我的问题是,如何从我的自定义控制器服务中的现有 cassandra 连接提供程序获取会话作为属性(或以其他方式),以便我可以使用该连接从我的自定义控制器服务编写/运行查询?

我构建了一些可以编译的东西,我认为它可以工作,但并不完全存在。

在自定义控制器服务的 pom 中,我添加了依赖项:

        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-cassandra-services-api</artifactId>
            <version>1.13.2</version>
        </dependency>

这允许我向我的自定义控制器服务添加属性描述符:

  public static final PropertyDescriptor CONNECTION_PROVIDER_SERVICE = new PropertyDescriptor.Builder()
      .name("cassandra-connection-provider")
      .displayName("Cassandra Connection Provider")
      .description("Specifies the Cassandra connection providing controller service.")
      .required(true)
      .identifiesControllerService(CassandraSessionProviderService.class)
      .build();

当我将自定义控制器服务添加到我的流程中时,该属性存在但为空。它没有显示我现有的 cassandra 连接提供程序作为选项,我也无法创建一个。它只是说:“没有找到适用于此属性的控制器服务类型。”

我怀疑问题与我的自定义控制器服务的属性有关,该属性需要我的项目中的 CassandraSessionProviderService.class,而不是 nifi 包中已经存在的那个,因为属性上的工具提示说它期望它来自我的项目,而现有的项目来自 nifi-cassandra-services 项目。即使我在 nifi-cassandra-services 模块上添加了第二个依赖项,它也允许我创建连接提供程序服务,但它是我项目的一个版本,而不是标准,因此它不起作用,因为它不再适用标准处理器。

我想作为一个普遍的问题,是否有可能,如果可以,我将如何正确设置依赖项以在自定义控制器服务中使用标准控制器服务包?

【问题讨论】:

    标签: java maven dependencies apache-nifi


    【解决方案1】:

    我想我已经明白了。添加 -api 依赖项就足够了,因为它是一个接口,允许编译并且需要如上所述。但是您还必须在自定义控制器服务的 -api-nar 模块中具有 -api-nar 依赖项。

    像这样:

            <dependency>
                <groupId>org.apache.nifi</groupId>
                <artifactId>nifi-cassandra-services-api-nar</artifactId>
                <version>1.13.2</version>
                <type>nar</type>
            </dependency>
    

    虽然 nar pom 可能已经对 nifi-standard-services-api-nar 有一个 nar 依赖,但是当你编译时会出现一个错误,说你只能有一个 nar 依赖。这是由于 nar 层次结构要求。可以在这里阅读更多内容:https://github.com/apache/nifi/blob/main/nifi-docs/src/main/asciidoc/developer-guide.adoc 如果有兴趣(它在底部。)

    但基本上我认为这意味着你摆脱了 nifi-standard-services-api-nar 依赖,转而支持 nifi-cassandra-services-api-nar,因为 cassandra nar 已经引用了标准服务 nar。因此,您通过添加 cassandra 服务包作为 nar 依赖项来创建父子层次结构。然后应该编译并允许在自定义控制器服务中引用 cassandra 连接服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-06
      • 2023-04-10
      • 2020-06-02
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多