10.3. 创建自定义连接器

在 Fuse Online 中,自定义连接器由一个或多个连接配置参数、一个或多个连接操作以及每个操作的可选配置参数。

以下是用于开发自定义连接器的任务概述:

  1. 在 Red Hat CodeReady Studio 中,创建一个 Fuse Online 扩展项目,然后选择 Custom Connector 作为扩展类型。
  2. 为扩展编写代码。定义基本 Camel 组件、连接器图标、全局连接器属性和连接器操作。

10.3.1. 为自定义连接器创建 Fuse Online 扩展项目

Fuse 工具 Fuse Online 扩展项目为自定义连接器提供了一个起点。

要创建 Fuse 工具 Fuse 在线扩展项目,请按照以下步骤操作:

  1. 在 Red Hat CodeReady Studio 中,选择 NewProjectRed Hat FuseFuse Online Extension Project

    New Fuse Online Extension Project 向导将打开。

    FuseOnlineExtWiz page1
  2. 输入项目的名称和位置,然后单击 Next

    FuseOnlineExtWiz page2
  3. 选择 Fuse Online 版本。
  4. 指定以下扩展详情:

    • 在 Fuse Online 环境中定义且在 Fuse Online 环境中是唯一的 ID criu-wagonA 值。当 Fuse Online 用户导入扩展 .jar 文件时,该值将在 Fuse Online 中可见。
    • 名称 扩展名为 wagon-wagon。这个值将在 Fuse Online 作为扩展名称中看到。在 Fuse Online 中,在 CustomizationsExtensions 选项卡中,用户可以看到上传到 Fuse Online 的扩展的名称和描述。
    • 描述 扩展内容的可选描述。
    • 版本 criu-MAPPINGThe version of the extension.例如,如果这是初始版本,您可以键入 1.0。如果要更新版本,您可以键入 1.12.0
  5. 为您要创建的 Fuse 在线扩展选择 Custom Connector

    FuseOnlineExtWiz connector
  6. Finish

新项目会出现在 Red Hat CodeReady Studio Project Explorer 视图中。它包括以下用于自定义连接器扩展的文件:

  • src/main/resources/META-INF/syndesis 文件夹中:

    • 描述符文件: syndesis-extension-definition.json

      这是您编辑的文件: * 添加顶级全局属性、连接器操作和操作属性。* 更改 Extension Id, Name, Version, 或 Description 值。

    • 默认图标镜像文件: icon.png

      您可以选择将此文件替换为您自己的图标镜像(PNG 或 SVG)文件。

  • Maven 项目对象模型文件: pom.xml

    此文件包含 Maven 用于构建项目的项目和配置详情的信息,包括默认扩展依赖项。您可以编辑此文件来添加自定义依赖项。红帽提供的任何依赖项的范围,例如:

    <dependency>
        <groupId>io.syndesis.extension</groupId>
        <artifactId>extension-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <scope>provided</scope>
    </dependency>

10.3.2. 为自定义连接器编写代码

创建 Fuse Online 扩展项目后,您可以编写根据 Fuse Online 用户为您提供所需功能的描述来定义自定义连接器元素的代码。表 10.1 “自定义连接器元素” 表显示您在 Fuse 工具中创建的自定义连接器元素如何与 Fuse Online 中的元素对应。

表 10.1. 自定义连接器元素

Fuse Tooling 元素Fuse Online 元素描述

全局(顶级)属性

连接配置参数

当 Fuse Online 用户从这个连接器创建连接时,用户会指定此属性的值作为连接的配置的一部分。

操作

连接操作

在 Fuse Online 中,对于从此连接器创建的连接,Fuse Online 用户选择这些操作之一。

操作中定义的属性

操作配置参数

当 Fuse Online 用户配置连接执行的操作时,Fuse Online 用户会指定此属性的值作为操作配置的一部分。

编写为 Fuse Online 实现自定义连接器的代码:

  1. 在 Editor 视图中打开 syndesis-extension-definition.json 文件,编写定义全局属性的代码,自定义连接器可以执行的操作以及每个操作的属性。

    每个 全局 属性都对应 Fuse Online 中的连接配置参数。每个 action 属性都对应于 Fuse Online connection action 配置参数。在 Fuse Online 中,当用户选择自定义连接器时,Fuse Online 会提示输入每个连接配置参数的值。自定义连接器可用于使用 OAuth 协议的应用程序。在这种情况下,请确保为 OAuth 客户端 ID 指定全局属性,以及 OAuth 客户端 secret 的另一个全局属性。Fuse Online 用户需要为这些参数指定值,以便从此连接器创建的连接正常工作。

    每个连接器操作都会 声明一个基本 Camel 组件方案。

    New Fuse Online Extension Project 向导提供的示例使用 telegram Camel 组件方案:

    {
      "schemaVersion" : "v1",
      "name" : "Example Fuse Online Extension",
      "extensionId" : "fuse.online.extension.example",
      "version" : "1.0.0",
      "actions" : [ {
        "id" : "io.syndesis:telegram-chat-from-action",
        "name" : "Chat Messages",
        "description" : "Receive all messages sent to the chat bot",
        "descriptor" : {
          "componentScheme" : "telegram",
          "inputDataShape" : {
            "kind" : "none"
          },
          "outputDataShape" : {
            "kind" : "java",
            "type" : "org.apache.camel.component.telegram.model.IncomingMessage"
          },
          "configuredProperties" : {
            "type" : "bots"
          }
        },
        "actionType" : "connector",
        "pattern" : "From"
      }, {
        "id" : "io.syndesis:telegram-chat-to-action",
        "name" : "Send a chat Messages",
        "description" : "Send messages to the chat (through the bot).",
        "descriptor" : {
          "componentScheme" : "telegram",
          "inputDataShape" : {
            "kind" : "java",
            "type" : "java.lang.String"
          },
          "outputDataShape" : {
            "kind" : "none"
          },
          "propertyDefinitionSteps" : [ {
            "description" : "Chat id",
            "name" : "chatId",
            "properties" : {
              "chatId" : {
                "kind" : "parameter",
                "displayName" : "Chat Id",
                "type" : "string",
                "javaType" : "String",
                "description" : "The telegram's Chat Id, if not set will use CamelTelegramChatId from the incoming exchange."
              }
            }
          } ],
          "configuredProperties" : {
            "type" : "bots"
          }
        },
        "actionType" : "connector",
        "pattern" : "To"
      } ],
      "properties" : {
        "authorizationToken" : {
          "kind" : "property",
          "displayName" : "Authorization Token",
          "group" : "security",
          "label" : "security",
          "required" : true,
          "type" : "string",
          "javaType" : "java.lang.String",
          "secret" : true,
          "description" : "Telegram Bot Authorization Token"
        }
      }
    }
  2. 如果自定义连接器需要额外的依赖项,请将它们添加到项目的 pom.xml 文件中。依赖项的默认范围是 runtime。如果您添加了红帽提供的依赖项,请自行定义其范围,例如:

    <dependencies>
        <dependency>
              <groupId>org.apache.camel</groupId>
              <artifactId>camel-telegram</artifactId>
              <scope>provided</scope>
        </dependency>
          </dependencies>

完成自定义连接器的代码编写后,构建 .jar 文件,如 第 10.5 节 “构建 Fuse Online 扩展 JAR 文件” 所述。