Apache Karaf 上的 Fuse 入门

Red Hat Fuse 7.11

在 Karaf 上开始使用红帽 Fuse

Red Hat Fuse Documentation Team

摘要

开始在 Apache 手册中使用 Fuse 构建应用程序。

前言

为了开始使用 Fuse,您需要为 Apache Karaf 容器下载并安装文件。有关安装、开发和构建第一个 Fuse 应用程序的信息和说明。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看我们的 CTO Chris Wright 信息

第 1 章 Karaf 上的 Fuse 入门

要了解 Karaf 上的 Fuse 以及安装、开发和构建您的第一个 Fuse 应用程序,并使用此处的信息和说明来帮助您完成这一操作。详情请查看以下主题:

1.1. 关于 Karaf 上的 Fuse

Apache Karaf 基于 OSGi 联盟的 OSGi 标准。OSGi 源自电信业,在其中开发可立即升级的网关服务器,而无需关闭服务器(称为 热代码交换的功能)。随后,OSOS 容器技术发现了多种其他用途,并被模块化应用程序(例如,Eclipse IDE)被广泛使用。

此容器技术的独特特点是:

  • 特别适用于在独立模式下运行。
  • 强大的模块化支持(OSGi 捆绑包),具有复杂的类加载支持。
  • 可以在容器中并排部署多个依赖项版本(但这需要这样做)。
  • 热代码交换,允许您在不关闭容器的情况下升级或替换模块。这是一个唯一的功能,但需要大量努力才能使它正常工作。

注意: 不支持 Spring Dynamic Modules(Spring-DM)(它将 Spring XML 与 Apache Karaf 中的 OSGi 服务层集成)。取而代之,您应该使用 Blueprint 框架。使用 Blueprint XML 不会阻止您从 Spring 框架中使用 Java 库:Spring 的最新版本与 Blueprint 兼容。

1.2. 在 Karaf 上安装 Fuse

可以从红帽客户门户网站下载 Karaf 上的 Fuse 7.11 的标准安装软件包。它会安装 Karaf 容器的标准组件,并提供完整的 Fuse 技术堆栈。

先决条件

流程

  1. 将 Apache 手册中 Fuse 下载的 .zip 存档文件解压缩到文件系统( FUSE_INSTALL )的便利位置。
  2. 将管理员用户添加到 Fuse 运行时。

    1. 在文本编辑器中打开 FUSE_INSTALL/etc/users.properties 文件。
    2. 删除以 # admin = admin 开头的行开头的 # 字符。
    3. 删除以 # _g_\:admingroup 开头的行开头的 # 字符。
    4. 自定义用户名、用户名、用户名、密码和密码、用户条目的 PASSWORD,以便具有用户条目和 admin 组条目,如下列内容(连续行):

      USERNAME = PASSWORD,_g_:admingroup
      _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
    5. 保存 etc/users.properties 文件。
  3. 运行 CodeReady Studio 安装程序,如下所示:

    java -jar DOWNLOAD_LOCATION/codereadystudio-12.21.3.GA-installer-standalone.jar
  4. 在安装过程中:

    1. 接受条款和条件。
    2. 选择您首选的安装路径。
    3. 选择 Java 8 JVM。
    4. Select Platforms and Servers 步骤中,单击 Add 并浏览到 FUSE_INSTALL 目录的位置,将 Fuse 配置到 Karaf 运行时。
    5. Select Additional Features to Install 步骤中,选择 Red Hat Fuse Tooling
  5. CodeReady Studio 启动。当显示 搜索运行时 对话框时,单击 OK,以在 Karaf 运行时上创建 Fuse。
  6. (可选) 要从命令行使用 Apache Maven,您需要安装并配置 Maven,如 在本地设置 Maven中所述。

    注意

    如果您仅使用 CodeReady Studio,则不需要严格安装 Maven,因为 CodeReady Studio 已为您预装并配置了 Maven。但是,如果您计划通过命令行调用 Maven,则需要执行此步骤。

1.3. 在 Karaf 上构建您的第一个 Fuse 应用程序

这组说明可帮助您在 Karaf 上构建第一个 Fuse 应用程序。

先决条件

流程

  1. 在 CodeReady Studio 中,创建一个新项目,如下所示:

    1. 选择 File→New→Fuse Integration Project
    2. Project Name 字段中输入 fuse-camel-cbr
    3. 点击 Next
    4. Select a Target Environment 窗格中,选择以下设置:

      • 选择 Standalone 作为部署平台。
      • 选择 Karaf 上的 Karaf/Fuse 作为运行时环境,并使用 Runtime (可选) 下拉菜单选择 fuse-karaf-7.11.1.fuse-7_11_1-00013-redhat-00003 Runtime 服务器作为目标运行时。
    5. 选择目标运行时后,会自动为您选择 Camel 版本,字段会灰显。
    6. 点击 Next
    7. Advanced Project Setup 窗格中,选择 Beginner→Content Based Router - Blueprint DSL 模板。
    8. Finish
    9. 如果系统提示您打开关联的 Fuse 集成透视图,请单击 Yes
    10. 等待 CodeReady Studio 下载所需的工件,并在后台构建项目。

      重要

      如果您首次在 CodeReady Studio 中构建 Fuse 项目,向导 需要几分钟时间 完成生成项目,因为它会从远程 Maven 存储库下载依赖项。在项目在后台构建时,不要尝试中断向导或关闭 CodeReady Studio。

  2. 将项目部署到服务器,如下所示:

    1. Servers 视图(Fuse Integration 视角的左下角)中,如果服务器尚未启动,请选择 fuse-karaf-7.11.1.fuse-7_11_1-00013-redhat-00003 Runtime Server 服务器,再单击绿色箭头来启动它。

      注意

      如果您看到对话框,警告:主机"localhost"的真实性无法建立。 单击 Yes 以连接到服务器并访问 Karaf 控制台。

    2. 等待 Console 视图中看到类似以下内容的消息:

      Karaf started in 1s. Bundle stats: 12 active, 12 total
    3. 服务器启动后,切换回 Servers 视图,右键单击服务器,然后从上下文菜单中选择 Add and Remove
    4. Add and Remove 对话框中,选择 fuse-camel-cbr 项目,然后点击 Add > 按钮。
    5. Finish
    6. 您可以通过进入 Terminal 视图并输入 bundle:list | tail 来检查项目的 OSGi 捆绑包是否已启动。您应该看到类似如下的输出:

      ...
      228 │ Active │  80 │ 1.0.0.201505202023          │ org.osgi:org.osgi.service.j
      232 │ Active │  80 │ 1.0.0.SNAPSHOT              │ Fuse CBR Quickstart
      注意

      Camel 路由启动后,它将在 Fuse 安装(不在 fuse-camel-cbr 项目中)创建一个目录 work/cbr/input

  3. 将您在项目的 src/main/data 目录中找到的文件复制到 FUSE_INSTALL/work/cbr/input 目录中。您可以在系统文件浏览器(Eclipse 之外)进行此操作。
  4. 稍等片刻,然后查看 FUSE_INSTALL/work/cbr/output 目录,以查看按国家组织相同的文件:

    1. work/cbr/output/others中的 order1.xml
    2. work/cbr/output/uk中的 order2.xmlorder4.xml
    3. work/cbr/output/us中的 order3.xmlorder5.xml
  5. 取消部署 项目,如下所示:

    1. Servers 视图中,选择 Red Hat Fuse 7+ Runtime Server 服务器。
    2. 右键单击服务器,然后从上下文菜单中选择 Add and Remove
    3. Add and Remove 对话框中,选择 fuse-camel-cbr 项目,然后单击 &lt ; Remove 按钮。
    4. Finish

第 2 章 本地设置 Maven

典型的 Fuse 应用程序开发使用 Maven 来构建和管理项目。

以下主题描述了如何在本地设置 Maven:

2.1. 准备设置 Maven

Maven 是一个来自 Apache 的免费开源构建工具。通常,您使用 Maven 来构建 Fuse 应用程序。

流程

  1. 从 Maven 下载 页面下载 Maven 的最新版本。
  2. 确定您的系统已连接到互联网。

    构建项目时,默认行为是 Maven 搜索外部存储库并下载所需的工件。Maven 会查找可通过互联网访问的存储库。

    您可以更改此行为,以便 Maven 只搜索本地网络上的存储库。也就是说,Maven 可以在离线模式下运行。在离线模式下,Maven 会在其本地存储库中查找工件。请参阅 第 2.3 节 “使用本地 Maven 软件仓库”

2.2. 将红帽软件仓库添加到 Maven

要访问 Red Hat Maven 存储库中的工件,您需要将这些存储库添加到 Maven 的 settings.xml 文件中。Maven 在用户主目录的 .m2 目录中查找 settings.xml 文件。如果没有用户指定的 settings.xml 文件,则 Maven 将使用 M2_HOME/conf/ settings.xml 中的系统级 settings.xml 文件。

前提条件

您知道要在其中添加 Red Hat 软件仓库的 settings.xml 文件的位置。

流程

settings.xml 文件中,为红帽软件仓库添加存储库元素,如下例所示:

<?xml version="1.0"?>
<settings>

  <profiles>
    <profile>
      <id>extra-repos</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
       <repository>
            <id>redhat-ga-repository</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>redhat-ea-repository</id>
            <url>https://maven.repository.redhat.com/earlyaccess/all</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
          <id>jboss-public</id>
          <name>JBoss Public Repository Group</name>
          <url>https://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
            <id>redhat-ga-repository</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>redhat-ea-repository</id>
            <url>https://maven.repository.redhat.com/earlyaccess/all</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
          <id>jboss-public</id>
          <name>JBoss Public Repository Group</name>
          <url>https://repository.jboss.org/nexus/content/groups/public</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>extra-repos</activeProfile>
  </activeProfiles>

</settings>

2.3. 使用本地 Maven 软件仓库

如果您在没有互联网连接的情况下运行容器,且您需要部署一个具有离线依赖项的应用程序,您可以使用 Maven 依赖项插件将应用程序的依赖项下载到 Maven 离线存储库中。然后,您可以将此自定义的 Maven 离线存储库分发到没有互联网连接的机器。

流程

  1. 在包含 pom.xml 文件的项目目录中,通过运行以下命令为 Maven 项目下载存储库,如下所示:

    mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.0:go-offline -Dmaven.repo.local=/tmp/my-project

    在本例中,构建项目所需的 Maven 依赖项和插件下载到 /tmp/my-project 目录中。

  2. 将此自定义的 Maven 脱机存储库分发给任何没有互联网连接的机器。

2.4. 使用环境变量或系统属性设置 Maven 镜像

在运行应用程序时,您需要访问 Red Hat Maven 软件仓库中的工件。这些软件仓库添加到 Maven 的 settings.xml 文件中。Maven 检查以下 settings.xml 文件的位置:

  • 查找指定的 url
  • 如果没有找到查找 ${user.home}/.m2/settings.xml
  • 如果没有找到查找 ${maven.home}/conf/settings.xml
  • 如果没有找到查找 ${M2_HOME}/conf/settings.xml
  • 如果没有找到位置,则创建空的 org.apache.maven.settings.Settings 实例。

2.4.1. 关于 Maven 镜像

Maven 使用一组远程存储库访问工件,它们目前在本地存储库中不可用。存储库列表几乎总是包含 Maven Central 软件仓库,但对于 Red Hat Fuse,它还包含 Maven 红帽软件仓库。在某些情况下,如果无法访问不同的远程存储库,也可以使用 Maven 镜像机制。镜像替代了特定的存储库 URL,因此当搜索远程工件到单个 URL 时,所有 HTTP 流量都会定向到单个 URL。

2.4.2. 在 settings.xml中添加 Maven mirror

要设置 Maven 镜像,请将以下内容添加到 Maven 的 settings.xml 中:

<mirror>
      <id>all</id>
      <mirrorOf>*</mirrorOf>
      <url>http://host:port/path</url>
</mirror>

如果在 settings.xml 文件中找不到上述部分,则不使用该镜像镜像。要在不提供 XML 配置的情况下指定全局镜像,您可以使用系统属性或环境变量。

2.4.3. 使用环境变量或系统属性设置 Maven 镜像

要使用环境变量或系统属性设置 Maven 镜像,您可以添加:

  • bin/setenv 文件调用 MAVEN_MIRROR_URL 的环境变量
  • 名为 mavenMirrorUrl 的系统属性到 etc/system.properties 文件

2.4.4. 使用 Maven 选项指定 Maven 镜像 url

要使用备用的 Maven 镜像 url,除了由环境变量或系统属性指定的其他属性外,在运行应用程序时使用以下 maven 选项:

  • -DmavenMirrorUrl=mirrorId::mirrorUrl

    例如,-DmavenMirrorUrl=my-mirror::http://mirror.net/repository

  • -DmavenMirrorUrl=mirrorUrl

    例如,-DmavenMirrorUrl=http://mirror.net/repository。在本例中,<mirror> 的 <id> 只是一个镜像。

2.5. 关于 Maven 工件和协调

在 Maven 构建系统中,基本构建块是一个 工件。构建后,工件的输出通常是一个存档,如 JAR 或 WAR 文件。

Maven 的一个关键方面是能够定位工件并管理它们之间的依赖关系。Maven 协调 是标识特定工件位置的一组值。基本协调过程使用以下形式的三个值:

groupId:artifactId:version

有时,Maven 与一个 打包值或者一个打包 值和 分类器 值增加了基本的协调。Maven 协调可以具有以下格式之一:

groupId:artifactId:version
groupId:artifactId:packaging:version
groupId:artifactId:packaging:classifier:version

以下是值的描述:

groupdId
定义工件名称的范围。您通常使用软件包名称的所有或部分作为组群 ID。例如,org.fusesource.example
artifactId
定义相对于组 ID 的工件名称。
version
指定工件的版本。版本号最多可以有 4 个部分: n.n.n.n,其中版本号的最后一部分可以包含非数字字符。例如,1.0- SNAPSHOT 的最后一部分是字母数字子字符串 0-SNAPSHOT
打包
定义构建项目时生成的打包实体。对于 OSGi 项目,打包是 捆绑包。默认值为 jar
分类器
可让您区分从同一 POM 构建但具有不同内容的工件。

工件的 POM 文件中的元素定义工件的组 ID、构件 ID、打包和版本,如下所示:

<project ... >
  ...
  <groupId>org.fusesource.example</groupId>
  <artifactId>bundle-demo</artifactId>
  <packaging>bundle</packaging>
  <version>1.0-SNAPSHOT</version>
  ...
</project>

要定义上述构件的依赖项,您要将以下 依赖项元素添加到 POM 文件中:

<project ... >
  ...
  <dependencies>
    <dependency>
      <groupId>org.fusesource.example</groupId>
      <artifactId>bundle-demo</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
  ...
</project>
注意

不需要在前面的依赖项中指定 捆绑 软件包类型,因为捆绑包只是特定类型的 JAR 文件,jar 是默认的 Maven 软件包类型。但是,如果您需要在依赖项中明确指定打包类型,您可以使用 type 元素。

法律通告

Copyright © 2023 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.