设计 API


Red Hat Fuse 7.8

在 OpenShift 上为 Fuse 应用程序设计 REST API

Red Hat Fuse Documentation Team

摘要

使用基于 Web 的 REST API Designer 指南

第 1 章 API Designer 概述

Red Hat Fuse on OpenShift 提供了基于 Web 的 API Designer,您可以使用它设计符合 OpenAPI 规格 (版本 3 或 2)的 REST API,这是 API 服务的厂商中立且可移植的开放描述格式。API Designer 是 Apicurio Studio 开源项目(https://www.apicur.io/)的"亮点"版本。这意味着您的 API Designer 会话是无状态的,您必须在每个会话结束时将您的 API 定义保存为 JSON 文件。

您还可以使用 API Designer 根据 REST API 定义生成初始 Fuse 项目。在 Fuse 开发环境中,您可以完成项目的 Camel 路由并构建项目。最后,您可以在 OpenShift 的 Fuse 上部署生成的 REST 服务。

以下是如何使用 API Designer 将 REST API 融入到 OpenShift 应用程序解决方案中的 REST API 的概述:

  1. 将 API Designer 作为服务添加到 OpenShift 项目中。
  2. 在 API Designer 中:

    • 使用 API Designer 创建 API 定义。将 REST API 定义保存为 JSON 文件到本地文件系统。您可以在编辑会话期间的任意点保存 API 定义,即使 API 定义没有完成。
    • 将 API 定义上传到 API Designer。
    • 根据当前的 REST API 定义生成 Fuse Camel 项目。API Designer 提供可下载的 zip 文件,其中包含完整的 Maven 项目。
  3. 在 Fuse 开发环境中,完成生成的 Fuse 项目提供的框架实施。
  4. 将 Fuse 应用构建并部署到 OpenShift。
  5. (可选)将 Fuse 应用程序与红帽 3scale API 管理集成,使用 3scale 服务发现功能来查找和配置 Fuse 应用程序。

第 2 章 将 API Designer 作为服务添加到 OpenShift 集群

2.1. 将 API Designer 作为服务添加到 OpenShift 4 项目中

对于 OpenShift 4.x,您需要验证您的 OpenShift 管理员是否已安装并订阅了项目中的 API Designer 操作器,如 OpenShift 的 Fuse 指南中所述

(可选)OpenShift 管理员可能还将 API Designer 作为服务添加到项目中。如果没有,则必须执行该任务。

注意

对于 API Designer Apicurito 的前一个名称,仍然在 API Designer 的界面中可见。

前提条件

  • 具有 OpenShift 集群的管理员访问权限。
  • 您已为 Red Hat Container Registry 配置身份验证。

流程

  1. 启动 OpenShift 4.x 服务器。
  2. 在 Web 浏览器中,导航到浏览器中的 OpenShift 控制台。使用您的凭证登录到控制台。
  3. Operators,然后点 OperatorHub
  4. 在搜索字段中,键入 API Designer
  5. API Designer 卡。API Designer operator install 页面将打开。
  6. Install。此时会打开 Install Operator 页面。

    1. 对于 Installation mode,请从集群中的命名空间列表中选择一个命名空间(项目),
    2. 对于 Approval Strategy,选择 AutomaticManual 来配置 OpenShift 如何处理对 API Designer Operator 的更新。

      • 如果选择 Automatic 更新,当 API Designer Operator 的新版本可用时,OpenShift Operator Lifecycle Manager (OLM)将自动升级 API Designer 的运行实例,而无需人为干预。
      • 如果选择手动 更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 API Designer operator 更新至新版本。
  7. Install 使 API Designer Operator 可供指定命名空间(项目)使用。
  8. 要验证项目中是否安装了 API Designer,请点 Operators,然后点 Installed Operators 查看列表中的 API Designer。

2.2. 将 API Designer 作为服务添加到 OpenShift 3.11 项目

您可以通过从命令行部署 API Designer 模板,将 API Designer 作为服务添加到 OpenShift 3.11 项目中。

先决条件

  • 按照 OpenShift 系统管理员推荐的准则,获取用于访问 API Designer 的主机名。
  • 通过在命令窗口中运行以下命令,验证 OpenShift 镜像和模板上的 Fuse 是否已安装 apidesigner-uifuse-apidesigner-generator

    oc get is -n openshift

    如果没有预安装镜像和模板,或者提供的版本已过时,请在 OpenShift 镜像和模板上安装(或更新) Fuse,如 OpenShift 上的 Fuse 指南 中所述。

流程

从命令行添加 API Designer 服务:

  1. 在命令窗口中登录到 OpenShift 服务器:

    oc login -u developer -p developer
  2. 创建一个新项目命名空间。例如,以下命令创建一个名为 myproject 的新项目:

    oc new-project myproject
  3. 运行以下命令,基于 API Designer 模板创建新应用(其中 myproject 是项目的名称):

    oc new-app -n myproject -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/fuse-apicurito.yml -p ROUTE_HOSTNAME=myhost

    注: 另外,您还可以在 oc new-app 命令中附加 additional -p 选项来指定其他模板参数。例如,如果您在默认 openshift 命名空间以外的命名空间中安装了 OpenShift 镜像和模板,您可以设置 IMAGE_STREAM_NAMESPACE 指定安装 Fuse 镜像流的命名空间:

    oc new-app -n myproject -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.0.fuse-sb2-7_10_0-00015-redhat-00001/fuse-apicurito.yml -p ROUTE_HOSTNAME=myhost -p IMAGE_STREAM_NAMESPACE=othernamespace
  4. 运行以下命令,获取 API Designer 部署的状态和 URL:

    oc status

    如果没有部署 API Designer,请运行以下命令验证您是否安装了 apicurito-uifuse-apicurito-generator 镜像的正确版本:

    oc get is -n openshift | grep "apicurito"
  5. 要从浏览器访问 API Designer,请使用提供的 URL (例如 https://apicurito.192.168.64.12.nip.io)。

第 3 章 使用 API Designer 设计和开发 API 定义

您可以使用 API Designer 设计并开发一个符合 OpenAPI 3 (或 2)规范的 REST API 定义。

先决条件

  • 您创建了 OpenShift 项目。
  • 您可以将 API Designer 服务添加到 OpenShift 项目中。

3.1. 在 API Designer 中创建 REST API 定义

下列步骤描述了如何创建 REST API 定义。

注意
  • 您可以从 OpenShift 上的 Fuse Online 或 Fuse 访问 API Designer 用户界面。
  • 对于 OpenShift 上的 Fuse,API Designer 是无状态的,这意味着它不会节省 OpenShift 会话之间的工作。您需要在会话之间将 API 保存到本地文件系统中。

关于示例

Task Management API 示例模拟一个简单的 API,销售顾问可能会用来跟踪与客户联系时需要执行的任务。"to-do"任务示例可能是"为新联系人创建帐户"或"替换现有联系人的顺序"。要实现 Task Management API 示例,您需要创建两个路径 - 一个用于任务,另一个用于特定任务。然后,您可以定义操作来创建任务,检索所有任务或特定任务,更新任务,以及删除任务。

先决条件

  • 您知道您要创建的 API 的端点。对于 Task Management API 示例,有两个端点: /HEKETI/InventoryService/{id}
  • 对于 OpenShift 上的 Fuse,您创建了 OpenShift 项目,并将 API Designer 服务添加到 OpenShift 项目中。

流程

  1. 如果您使用 Fuse Online,请跳至第 2 步。

    如果您在 OpenShift 中使用 Fuse:

    1. 登录您的 OpenShift Web 控制台,然后打开包含 API Designer 的项目。
    2. 对于 OpenShift 4.x,选择 Topology,然后单击 apicurito-service 图标的 URL 链接。

      对于 OpenShift 3.11,从应用程序列表中点击 API Designer 的 URL,例如 https://apidesigner-myproject.192.168.64.43.nip.io

      为 API Designer 打开一个新的浏览器窗口或标签页。

      注意

      因为 API Designer 是 Apicurio Studio 开源项目的 "亮点"版本,"Apicurio"显示在 API Designer 界面中。

  2. 单击 New API。此时会打开一个新的 API 页面。

    默认情况下,API Designer 使用 OpenAPI 3 规格。如果要使用 OpenAPI 2 规格,点 New API 按钮旁边的箭头,然后选择 OpenAPI 2

    注意

    如果您根据 OpenAPI 2 规格打开 API,您可以使用 API Designer 的 Convert to OpenAPI 3 选项转换 API 以符合 OpenAPI 3 规格。

  3. 更改 API 名称:

    1. 将光标悬停在名称上,然后点出现的编辑图标( 28 )。
    2. 编辑名称。例如,键入 Task API
    3. 点勾选标记图标确认名称更改。
  4. (可选):

    • 提供版本号和描述。
    • 添加您的联系信息(名称、电子邮件地址和 URL)。
    • 选择许可证。
    • 定义标签。
    • 定义一个或多个服务器。
    • 配置安全方案。
    • 指定安全要求。
  5. 定义 API 的每个端点的相对路径。字段名称必须以斜杠(/)开头。

    对于 Task Management API 示例,创建两个路径:

    • 任务的路径: / libpmem
    • 按 ID: /wagon/{id}的特定任务的路径

      apidesigner 路径
  6. 指定任何路径参数的类型。

    对于 id 参数示例:

    1. Paths 列表中,单击 /bulk/{id}

      id 参数会出现在 PATH PARAMETERS 部分中。

    2. Create
    3. 对于描述,键入: 要查找的任务 ID。
    4. 对于类型,选择 integer 作为 32 位整数

      apidesigner 参数
  7. Data Types 部分中,为 API 定义可重复使用的类型。

    1. 单击 Add a data type
    2. Add Data Type 对话框中输入名称。对于 Task Management API 示例,键入 Todo
    3. 另外,您还可以提供一个示例,API Designer 从哪个 API Designer 创建数据类型的 schema。然后您可以编辑生成的模式。

      对于 Task Management API 示例,以以下 JSON 示例开始:

      {
          "id": 1,
          "task": "my task",
          "completed": false
      }
    4. 另外,您可以选择使用数据类型创建 REST 资源。
    5. 点击 Save。如果您提供了一个示例,API Designer 从示例中生成一个模式:

      apidesigner datatype schema
  8. 另外,您可以添加模式属性并添加新属性。
  9. 对于 Task Management API 示例,创建另一个名为 Task 的数据类型,其中包含一个名为 task 的属性,类型为 string

    apidesigner 另一种类型
  10. 对于每个路径,定义操作(GET、PUT、POST、DELETE、OPTIONS、HEAD 或 PATCH)。

    对于 Task Management API 示例,请按照下表所述定义操作:

    表 3.1. 任务管理 API 操作
    路径操作描述请求正文响应

    /todo

    POST

    创建新任务。

    介质类型: application/json Data Type: Task

    • 状态代码: 201 Description: 任务创建

      响应正文: Media Type: application/json Data Type: Todo

    /todo

    GET

    获取所有任务。

    Not applicable

    • 状态代码: 200 Description : 任务列表

    /todo/{id}

    GET

    按 ID 获取任务。

    Not applicable

    • Status Code: 200 Description: Task found for ID Response Body: Media Type: application/json Data type: Task
    • Status Code: 404 Description: No tasks with provided identifier found.

    /todo/{id}

    PUT

    按 ID 更新任务。

    Request Body type: Task

    • Status Code: 200 Description: Completed
    • Status Code: 400 Description: Task not updated

    /todo/{id}

    DELETE

    按 ID 删除任务。

    Not applicable

    • Status Code: 200 Description: Task deleted
    • Status Code: 400 Description: Task not deleted
  11. 解决任何问题,如 解决 API Designer 中的验证问题 中所述。
  12. 对于 OpenShift 上的 Fuse,点 Save As 保存您的 API 规格,然后选择 JSONYAML 格式。

    JSON 或 YAML 文件下载到您的本地下载文件夹中。默认文件名是 openapi-spec,带有适当的文件扩展名。

其他资源

3.2. 解决 API Designer 中的验证问题

当您创建并编辑 API 时,API Designer 会识别您必须通过感叹号(!)图标解决的问题,以及 API Designer 标题栏中的问题列表。

先决条件

  • 在 API Designer 中打开 API。

流程

  1. 查找由感叹号(!)图标显示的问题。例如:

    API Designer 问题
  2. 单击感叹号图标以查看问题的描述。例如:

    API Designer 问题
  3. 根据问题描述提供的信息,导航到问题的位置并修复它。

    例如,要修复"Operation 必须至少有一个响应"问题,请单击 GET 操作以打开它,然后单击 Add a response

    apidesigner issuelocate

    输入响应的描述后,这个问题已解决,感叹号图标会消失:

    apidesigner issuefix
  4. 有关所有问题的摘要:

    1. 点右上角的 issues 链接。

      所有问题
    2. Go 到一个特定问题的问题,进入问题的位置,以便您可以解决这个问题。

      问题列表

第 4 章 实施、构建和部署基于 REST API 的 Fuse 应用程序

您可以使用红帽 Fuse API Designer 根据 REST API 定义生成 Camel Fuse 项目。在 Fuse 开发环境中,您可以完成 Camel 路由和 Rest DSL API。最后,您可以构建项目,并将生成的应用部署到 OpenShift 上的 Fuse 中。

先决条件

  • 您有一个现有的 API 定义,它符合 OpenAPI 3 (或 2)规格。例如,使用 API Designer 创建的 openapi-spec.json 文件。
  • API Designer 在本地 OpenShift 集群上安装并运行。
  • 您有一个现有 OpenShift 项目,并将 API Designer 添加为服务。
  • 您已安装了 Maven 和 Red Hat Fuse。

以下主题描述了如何根据 REST API 实施、构建和部署 Fuse 应用程序:

4.1. 将 API 定义上传到 API Designer

您可以将现有的 API 定义上传到 API Designer。

先决条件

  • 您有一个现有的 API 定义,它符合 OpenAPI 3 (或 2)规格。例如,使用 API Designer 创建的 openapi.json 文件。
  • API Designer 在本地 OpenShift 集群上安装并运行。
  • 您有一个现有 OpenShift 项目,并将 API Designer 添加为应用。

流程

  1. 在 OpenShift Web 控制台中,打开包含 API Designer 的项目。
  2. 打开 API Designer 控制台。在项目的应用程序列表中,点 apidesigner 下的 URL。例如: https://apidesigner-myproject.192.168.64.38.nip.io

    API Designer 控制台会在单独的 Web 浏览器标签页或窗口中打开。

  3. 单击 Open API

    此时会打开文件管理器窗口。

  4. 在文件管理器窗口中:

    1. 导航到包含现有 OpenAPI 定义文件的文件夹,如 openapi.json
    2. 选择 OpenAPI 定义文件,然后点 Open

      OpenAPI 定义在 API Designer 控制台中打开。

4.2. 从 API Designer 生成 Fuse Camel 项目

您可以使用 API Designer 根据 API 定义生成 Fuse Camel 项目。

先决条件

  • API Designer 在本地 OpenShift 集群上安装并运行。
  • 您有一个现有 OpenShift 项目,并将 API Designer 添加为应用。
  • 您已在 API Designer 控制台中创建或打开了 API 定义文件。

流程

在 API Designer 控制台中:

  1. Generate
  2. 从下拉列表中选择 Fuse Camel Project

API Designer 生成 camel-project.zip 文件,并将其下载到您的本地默认下载文件夹中。

zip 文件包含一个 Fuse Camel 项目,它使用 Camel 的 Rest DSL 提供 API 定义的默认框架实施,包括所有资源操作。该项目还包含您用于生成项目的原始 OpenAPI 定义文件。

4.3. 完成 API Designer-generated Camel 项目

API Designer 生成 Fuse 项目,该项目使用 Camel 的 Rest DSL 提供 API 定义的默认框架实施,覆盖所有资源操作。在 Fuse 开发环境中,您将完成该项目。

先决条件

  • 您有一个由 API Designer 生成的 camel-project.zip 文件。
  • (可选)您已使用 Fuse 工具安装了 Red Hat Developer Studio。

流程

  1. 将 API Designer-generated camel-project.zip 文件解压缩到临时文件夹。
  2. Open Red Hat Developer Studio.
  3. 在 Developer Studio 中,选择 FileImport
  4. Import 对话框中,选择 MavenExisting Maven Projects
  5. 在编辑器视图中打开项目的 camel-context.xml 文件。
  6. 单击 REST 选项卡,以编辑 Rest DSL 组件。

    有关定义 REST 服务的详情,请参考 Apache Camel 开发指南中的 "定义 REST 服务"部分。

    有关使用 Swagger 支持扩展 JAX-RS 端点的详情,请参考 Apache CXF 开发指南

    有关使用 Fuse 工具 REST 编辑器的详情,请参考工具 用户指南 的"查看和编辑 Rest DSL 组件"部分。

  7. 在 Design 选项卡中,编辑 Camel 路由。

    有关编辑 Camel 路由的详情,请参考 工具用户指南中的"编辑路由上下文"部分

4.4. 构建和部署 REST 服务

完成 Fuse 项目后,您可以在 OpenShift 中构建和部署项目。

先决条件

  • 您有一个定义 REST 服务的完整、无错误的 Fuse 项目。
  • 已安装 Java 8 JDK (或更新版本)和 Maven 3.3.x (或更新版本)。

流程

如果您有一个单节点 OpenShift 集群,如 Minishift 或 Red Hat Container Development Kit,您可以在其中部署项目。http://appdev.openshift.io/docs/minishift-installation.html

将此项目部署到正在运行的单节点 OpenShift 集群中:

  1. 登录到您的 OpenShift 集群:

    $ oc login -u developer -p developer
  2. 为项目创建新的 OpenShift 项目。例如,以下命令会创建一个名为 test-deploy 的新项目。

    $ oc new-project test-deploy
  3. 将目录改为包含 Fuse Camel 项目(如 myworkspace/camel-project)的文件夹:

    $ cd myworkspace/camel-project
  4. 构建项目并将其部署到 OpenShift 集群:

    $ mvn clean fabric8:deploy -Popenshift
  5. 在您的浏览器中,打开 OpenShift 控制台并导航到项目(如 test-deploy)。等待直到您可以看到 camel-project 应用的 pod 已启动。
  6. 在项目的 Overview 页面上,找到 camel-project 应用程序的 URL。URL 使用以下格式 :http://camel-project-MY_PROJECT_NAME.OPENSHIFT_IP_ADDR.nip.io。
  7. 单击 URL 以访问该服务。

第 5 章 为 3scale 发现准备 API 服务

红帽 3scale API 管理是一个红帽提供的产品,可让您规范访问公共互联网上的 API 服务。3scale 的功能包括强制执行服务级别协议(SLA)的功能,管理 API 版本,提供安全和身份验证服务等。Fuse 支持 3scale 的服务发现功能,这有助于从 3scale 管理门户 UI 发现 Fuse 服务。通过使用服务发现,您可以扫描在同一 OpenShift 集群中运行的 Fuse 应用程序,并将关联的 API 定义自动导入到 3scale。

先决条件

  • 在 OpenShift 中部署和运行提供 API 服务的 Fuse 应用。
  • Fuse 应用程序使用 requisite 注释标注,使它可以被 3scale 发现。

    注意

    由 API Designer 生成的 Fuse 项目预先配置为自动提供必要的注解。

    对于不是由 API Designer 生成的 Fuse 项目,您必须配置项目,如 为不是由 API Designer 生成的 Fuse 项目添加注解 中所述。

  • 3scale API 管理系统部署到与要发现的 API 服务 相同的 OpenShift 集群中。

有关在 3scale 中发现 API 服务的步骤的详情,请查看 Red Hat 3scale API 管理门户指南中的 服务发现部分。

5.1. 为不是由 API Designer 生成的 Fuse 项目添加注解

为了 3scale 发现 API 服务,提供 API 服务的 Fuse 应用程序必须包含可以发现的 Kubernetes Service Annotations。这些注释由 Fabric8 服务发现 Enricher 提供,该注释是 Fabric8 Maven 插件的一部分。

对于 Apache Camel Rest DSL 项目,Fabric8 Maven 插件默认运行 Fabric8 服务发现 Enricher。

由 API Designer 生成的 Fuse 项目预先配置为自动提供所需的注解。

流程

对于不是由 API Designer 生成的 Fuse Rest DSL 项目,请按如下所示配置项目:

  1. 编辑 Fuse 项目的 pom.xml 文件,使其包含 fabric8-maven-plugin 依赖项,如下例所示:

    <plugin>
            <groupId>org.jboss.redhat-fuse</groupId>
            <artifactId>fabric8-maven-plugin</artifactId>
            <version>${fuse.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>resource</goal>
                  <goal>build</goal>
                </goals>
              </execution>
            </executions>
      </plugin>

    如果满足某些项目级别条件(例如,项目必须是 Camel Rest DSL 项目),则 Fabric8 Maven 插件将运行 Fabric8 服务发现功能。您不需要将 Fabric8 服务发现 Enricher 指定为 pom.xml 文件中的依赖项,除非您想自定义增强的行为(如 自定义 API 服务注释值 中所述)

  2. 在 Fuse Rest DSL 项目的 camel-context.xml 文件中,在 restConfiguration 项中指定以下属性:

    • 方案 :托管该服务的 URL 的方案部分。您可以指定 "http" 或 "https"。
    • contextPath :托管 API 服务的 URL 的路径部分。
    • apiContextPath :托管 API 服务描述文档的位置的路径。如果文档是自托管,则可以指定相对路径,或者指定完整的 URL (如果文档外部托管)。

      以下示例 camel-context.xml 文件显示了 restConfiguration 元素中的注解属性值:

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://camel.apache.org/schema/spring       http://camel.apache.org/schema/spring/camel-spring.xsd">
      
          <camelContext xmlns="http://camel.apache.org/schema/spring">
              <restConfiguration component="servlet" scheme="https"
                    contextPath="myapi" apiContextPath="myapi/openapi.json"/>
      ...

增强器使用这些 restConfiguration 元素属性值提供的信息,为 discovery.3scale.net/schemediscovery.3scale.net/path 创建值,如 Red Hat 3scale API Management Portal 指南的 服务发现部分中所述。

增强器添加以下标签和注解,使服务可以被 3scale 发现:

  • discovery.3scale.net 标签:默认情况下,增强器将此值设置为 "true"。3scale 执行选择器定义以查找需要发现的所有服务时,它会使用此标签。
  • 以下注解:

    • discovery.3scale.net/discovery-version:(可选)3scale 发现过程的版本。增强器默认设置为 "v1"。
    • discovery.3scale.net/scheme :托管该服务的 URL 的方案部分。增强器使用默认的 "http",除非您在 restConfiguration 元素的 scheme 属性中覆盖它。其他可能的值是 "https"。
    • discovery.3scale.net/path :托管该服务的 URL 的路径部分。当路径位于 root, "/" 时,会忽略此注解。增强器从 restConfiguration 元素的 path 属性获取这个值。
    • discovery.3scale.net/port :服务的端口。增强从 Kubernetes 服务定义中获取这个值,其中包含它所公开的服务的端口号。如果 Kubernetes 服务定义公开多个服务,增强器会使用列出的第一个端口。
    • discovery.3scale.net/description-path: (可选) OpenAPI 服务描述文档的路径。增强器从 restConfiguration 元素的 contextPath 属性获取这个值。

您可以自定义 Fabric8 服务发现 Enricher 的行为,如 自定义 API 服务注释值 中所述。

5.2. 自定义 API 服务注解值

Maven Fabric8 插件默认运行 Fabric8 服务发现 Enricher。增强器为 Fuse Rest DSL 项目的 API 服务添加注解,以便 API 服务可由 3scale 发现,如 Red Hat 3scale API Management Admin Portal 指南中的使用 服务发现 所述。

增强器对一些注解使用默认值,并从项目的 camel-context.xml 文件中获取其他注解的值。

您可以通过在 Fuse 项目 pom.xml 文件中定义值或 service.yml 文件来覆盖 camel-context.xml 文件中定义的默认值和值。(如果您在这两个文件中都定义了值,增强器将使用 service.yml 文件中的值。)有关您可以为 Fabric8 服务发现功能 功能指定的元素的描述信息,请参阅 Fabric8 服务发现功能。

流程

在 Fuse 项目 pom.xml 文件中指定注解值:

  1. 在您选择的编辑器中打开 Fuse 项目的 pom.xml 文件。
  2. 找到 fabric8-maven-plugin 依赖项,如下例所示:

    <plugin>
            <groupId>org.jboss.redhat-fuse</groupId>
            <artifactId>fabric8-maven-plugin</artifactId>
            <version>${fuse.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>resource</goal>
                  <goal>build</goal>
                </goals>
              </execution>
            </executions>
      </plugin>
  3. 如以下示例所示,将 Fabric8 服务发现功能作为依赖项添加到 Fabric8-Maven 插件中。

    <plugin>
      <groupId>org.jboss.redhat-fuse</groupId>
      <artifactId>fabric8-maven-plugin</artifactId>
      <version>${fuse.version}</version>
      <executions>
        <execution>
          <goals>
            <goal>resource</goal>
            <goal>build</goal>
          </goals>
        </execution>
      </executions>
      <dependencies>
        <dependency>
          <groupId>io.acme</groupId>
          <artifactId>myenricher</artifactId>
          <version>1.0</version>
          <configuration>
            <enricher>
              <config>
                <f8-service-discovery>
                  <scheme>https</scheme>
                  <path>/api</path>
                  <descriptionPath>/api/openapi.json</descriptionPath>
                </f8-service-discovery>
              </config>
            </enricher>
          </configuration>
          </dependency>
      </dependencies>
    </plugin>
  4. 保存您的更改。

或者,您可以使用 src/main/fabric8/service.yml 片段覆盖注解值,如下例所示:

kind: Service
name:
metadata:
  labels:
    discovery.3scale.net/discoverable : "true"
  annotations:
    discovery.3scale.net/discovery-version : "v1"
    discovery.3scale.net/scheme : "https"
    discovery.3scale.net/path : "/api"
    discovery.3scale.net/port : "443"
    discovery.3scale.net/description-path : "/api/openapi.json"
spec:
  type: LoadBalancer

5.3. Fabric8 服务发现 Enricher 元素

下表描述了您可以为 Fabric8 服务发现 Enricher 指定的元素,如果要覆盖默认值和 camel-context.xml 文件中定义的值。

您可以在 Fuse Rest DSL 项目的 pom.xml 文件中定义这些值,或者在 src/main/fabric8/service.yml 文件中定义。(如果您在这两个文件中都定义了值,增强器将使用 service.yml 文件中的值。)如需示例 ,请参阅自定义 API 服务注解值

表 5.1. Fabric8 服务发现 Enricher 元素
元素描述default

springDir

包含 camel-context.xml 文件的 spring 配置目录的路径。

用于识别 Camel Rest DSL 项目的 /src/main/resources/spring 路径。

scheme

托管该服务的 URL 的方案部分。您可以指定 "http" 或 "https"。

http

path

托管 API 服务的 URL 的路径部分。

 

port

托管 API 服务的 URL 端口部分。

80

descriptionPath

托管 API 服务描述文档的位置的路径。如果文档是自托管,则可以指定相对路径,或者指定完整的 URL (如果文档外部托管)。

 

discoveryVersion

3scale 发现实施的版本。

v1

可发现

discovery.3scale.net 标签设置为 truefalse 的元素。

如果设置为 true,3scale 将尝试发现此服务。

如果设置为 false,3scale 将不会尝试发现此服务。

您可以使用此元素作为开关,通过将其设置为 "false" 来临时关闭 3scale 发现集成。

如果没有指定值,增强器会尝试自动探测它是否可发现该服务。如果增强器决定无法发现该服务,3scale 将无法尝试发现该服务。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.