Apache Karaf 上的 Fuse 入门
在 Karaf 上开始使用红帽 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 技术堆栈。
先决条件
- 您需要在 红帽客户门户网站 中有一个完整的订阅帐户。
- 您必须登录客户门户。
- 您必须已下载 CodeReady Studio 安装程序。
- 您必须在 Karaf 安装程序中下载 Fuse。
流程
-
将 Apache 手册中 Fuse 下载的
.zip
存档文件解压缩到文件系统(FUSE_INSTALL
)的便利位置。 将管理员用户添加到 Fuse 运行时。
-
在文本编辑器中打开
FUSE_INSTALL/etc/users.properties
文件。 -
删除以
#
admin = admin -
删除以
#
_g_\:admingroup 自定义用户名、用户名、用户名、密码和密码、用户条目的
PASSWORD
,以便具有用户条目和 admin 组条目,如下列内容(连续行):USERNAME = PASSWORD,_g_:admingroup _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
-
保存
etc/users.properties
文件。
-
在文本编辑器中打开
运行 CodeReady Studio 安装程序,如下所示:
java -jar DOWNLOAD_LOCATION/codereadystudio-12.21.3.GA-installer-standalone.jar
在安装过程中:
- 接受条款和条件。
- 选择您首选的安装路径。
- 选择 Java 8 JVM。
-
在 Select Platforms and Servers 步骤中,单击 Add 并浏览到
FUSE_INSTALL
目录的位置,将 Fuse 配置到 Karaf 运行时。 - 在 Select Additional Features to Install 步骤中,选择 Red Hat Fuse Tooling。
- CodeReady Studio 启动。当显示 搜索运行时 对话框时,单击 OK,以在 Karaf 运行时上创建 Fuse。
(可选) 要从命令行使用 Apache Maven,您需要安装并配置 Maven,如 在本地设置 Maven中所述。
注意如果您仅使用 CodeReady Studio,则不需要严格安装 Maven,因为 CodeReady Studio 已为您预装并配置了 Maven。但是,如果您计划通过命令行调用 Maven,则需要执行此步骤。
1.3. 在 Karaf 上构建您的第一个 Fuse 应用程序
这组说明可帮助您在 Karaf 上构建第一个 Fuse 应用程序。
先决条件
- 您需要在 红帽客户门户网站 中有一个完整的订阅帐户。
- 您必须登录客户门户。
- 您必须已下载 CodeReady Studio 安装程序。
- 您必须已在 Karaf 上下载并成功安装了 Fuse。
流程
在 CodeReady Studio 中,创建一个新项目,如下所示:
- 选择 File→New→Fuse Integration Project。
-
在 Project Name 字段中输入
fuse-camel-cbr
。 - 点击 Next。
在 Select a Target Environment 窗格中,选择以下设置:
- 选择 Standalone 作为部署平台。
-
选择 Karaf 上的 Karaf/Fuse 作为运行时环境,并使用 Runtime (可选) 下拉菜单选择
fuse-karaf-7.11.1.fuse-7_11_1-00013-redhat-00003 Runtime
服务器作为目标运行时。
- 选择目标运行时后,会自动为您选择 Camel 版本,字段会灰显。
- 点击 Next。
- 在 Advanced Project Setup 窗格中,选择 Beginner→Content Based Router - Blueprint DSL 模板。
- 点 Finish。
- 如果系统提示您打开关联的 Fuse 集成透视图,请单击 Yes。
等待 CodeReady Studio 下载所需的工件,并在后台构建项目。
重要如果您首次在 CodeReady Studio 中构建 Fuse 项目,向导 需要几分钟时间 完成生成项目,因为它会从远程 Maven 存储库下载依赖项。在项目在后台构建时,不要尝试中断向导或关闭 CodeReady Studio。
将项目部署到服务器,如下所示:
在 Servers 视图(Fuse Integration 视角的左下角)中,如果服务器尚未启动,请选择
fuse-karaf-7.11.1.fuse-7_11_1-00013-redhat-00003 Runtime Server
服务器,再单击绿色箭头来启动它。注意如果您看到对话框,警告:主机"localhost"的真实性无法建立。 单击 Yes 以连接到服务器并访问 Karaf 控制台。
等待 Console 视图中看到类似以下内容的消息:
Karaf started in 1s. Bundle stats: 12 active, 12 total
- 服务器启动后,切换回 Servers 视图,右键单击服务器,然后从上下文菜单中选择 Add and Remove。
-
在 Add and Remove 对话框中,选择
fuse-camel-cbr
项目,然后点击 Add > 按钮。 - 点 Finish。
您可以通过进入 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
。
-
将您在项目的
src/main/data
目录中找到的文件复制到FUSE_INSTALL/work/cbr/input
目录中。您可以在系统文件浏览器(Eclipse 之外)进行此操作。 稍等片刻,然后查看
FUSE_INSTALL/work/cbr/output
目录,以查看按国家组织相同的文件:-
work/cbr/output/others
中的order1.xml
-
work/cbr/output/uk
中的order2.xml
和order4.xml
-
work/cbr/output/us
中的order3.xml
和order5.xml
-
取消部署 项目,如下所示:
-
在 Servers 视图中,选择
Red Hat Fuse 7+ Runtime Server
服务器。 - 右键单击服务器,然后从上下文菜单中选择 Add and Remove。
-
在 Add and Remove 对话框中,选择
fuse-camel-cbr
项目,然后单击 < ; Remove 按钮。 - 点 Finish。
-
在 Servers 视图中,选择
第 2 章 本地设置 Maven
典型的 Fuse 应用程序开发使用 Maven 来构建和管理项目。
以下主题描述了如何在本地设置 Maven:
2.1. 准备设置 Maven
Maven 是一个来自 Apache 的免费开源构建工具。通常,您使用 Maven 来构建 Fuse 应用程序。
流程
- 从 Maven 下载 页面下载 Maven 的最新版本。
确定您的系统已连接到互联网。
构建项目时,默认行为是 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 离线存储库分发到没有互联网连接的机器。
流程
在包含
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
目录中。- 将此自定义的 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
元素。