使用 JBoss EAP XP 5.0


Red Hat JBoss Enterprise Application Platform 8.0

用于 JBoss EAP XP 5.0

Red Hat Customer Content Services

摘要

本文档提供有关使用 JBoss EAP XP 5.0 的一般信息。

使开源包含更多

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

提供有关 JBoss EAP 文档的反馈

要报告错误或改进文档,请登录您的红帽 JIRA 帐户并提交问题。如果您没有红帽 JIRA 帐户,系统会提示您创建一个帐户。

流程

  1. 单击以下链接 来创建 ticket
  2. Summary 中输入有关此问题的简单描述。
  3. 描述中提供问题或增强功能的详细描述。请包括有问题的文档 URL。
  4. Submit 创建问题并将其路由到适当的文档团队。

如果要在不预安装 JBoss EAP 8.0 服务器的情况下安装 JBoss EAP XP 5.0,请按照以下步骤操作。

先决条件

  • 您可以访问互联网。
  • 您已在红帽客户门户网站中创建了一个帐户,并已登录。
  • 您已下载了 jboss-eap-installation-manager
注意

从 Update 02 或更高版本使用 jboss-eap-installation-manager。从红帽客户门户网站上的 JBoss EAP 8.0 补丁页下载正确的版本,或者运行以下命令来更新现有安装:

./bin/jboss-eap-installation-manager.sh update perform --self
Copy to Clipboard Toggle word wrap

运行以下命令,验证安装管理器的版本:

./bin/jboss-eap-installation-manager.sh --version
Copy to Clipboard Toggle word wrap

流程

  1. 打开终端模拟器,再导航到 jboss-eap-installation-manager 目录。
  2. jboss-eap-installation-manager 目录运行以下命令来安装 JBoss EAP XP:

    ./bin/jboss-eap-installation-manager.sh install --profile eap-xp-5.0 --dir eap-xp-5
    Copy to Clipboard Toggle word wrap

您可以使用 jboss-eap-installation-manager 将额外的 JBoss EAP XP 5.0 功能 pack 添加到现有的 JBoss EAP 安装中。

先决条件

  • 您在红帽客户门户网站中有一个帐户并已登录。
  • 您已查看了 JBoss EAP XP 5.0 支持的配置。
  • 已安装受支持的 JDK。
  • 您已下载了 jboss-eap-installation-manager。有关下载 jboss-eap-installation-manager 的更多信息,请参阅 安装指南
  • 您已使用一种受支持的方法下载或安装了 JBoss EAP 8.0。有关下载 JBoss EAP 的更多信息,请参阅 安装指南
注意

安装 JBoss EAP XP 扩展将自动执行服务器更新,以接收最新的组件更新。

流程

  1. 打开终端模拟器,再导航到 jboss-eap-installation-manager 目录。
  2. jboss-eap-installation-manager 目录运行此脚本,通过执行以下命令将服务器订阅到 JBoss EAP XP 频道:

    ./bin/jboss-eap-installation-manager.sh channel add \
     --channel-name eap-xp-5.0 \
     --repositories=mrrc-ga::https://maven.repository.redhat.com/ga \
     --manifest org.jboss.eap.channels:eap-xp-5.0 \
     --dir eap-xp-5.0
    Copy to Clipboard Toggle word wrap
  3. 通过执行以下操作安装 JBoss EAP XP 扩展:

    ./bin/jboss-eap-installation-manager.sh feature-pack add \
     --fpl org.jboss.eap.xp:wildfly-galleon-pack \
     --dir eap-xp-5.0
    Copy to Clipboard Toggle word wrap

您可以使用 jboss-eap-installation-manager 将其他 JBoss EAP XP 5.0 功能 pack 添加到现有的 JBoss EAP 安装中。

先决条件

  • 您已查看了 JBoss EAP XP 5.0 支持的配置。
  • 已安装受支持的 JDK。
  • 您已下载了 jboss-eap-installation-manager。有关下载 jboss-eap-installation-manager 的更多信息,请参阅 安装指南
  • 您已使用一种受支持的方法下载或安装了 JBoss EAP 8.0。有关下载 JBoss EAP 的更多信息,请参阅 安装指南
  • 您已为 JBoss EAP 8.0 和 JBoss EAP XP 5.0 下载并提取了最新的离线存储库。

流程

  1. 打开终端模拟器,再导航到 jboss-eap-installation-manager 目录。
  2. jboss-eap-installation-manager 目录运行此脚本,通过执行以下命令将服务器订阅到 JBoss EAP XP 频道:
./bin/jboss-eap-installation-manager.sh channel add \
 --channel-name eap-xp-5.0 \
 --repositories=mrrc-ga::https://maven.repository.redhat.com/ga \
 --manifest org.jboss.eap.channels:eap-xp-5.0 \
 --dir eap-xp-5.0
Copy to Clipboard Toggle word wrap
  1. 安装 JBoss EAP XP 并使用-- repositories 参数指定 离线存储库:
./bin/jboss-eap-installation-manager.sh feature-pack add \
 --fpl org.jboss.eap.xp:wildfly-galleon-pack \
 --dir eap-xp-5.0 \
 --repositories <JBOSS_EAP_XP_OFFLINE_REPO_PATH>,<JBOSS_EAP_8.0_OFFLINE_REPO_PATH>
Copy to Clipboard Toggle word wrap
注意

功能包将添加到 JBoss EAP 安装中,并传递在-- dir 选项中

如果在下载并安装新更新后,您可以定期更新 JBoss EAP XP。

先决条件

  • 您可以访问互联网。
  • 已安装受支持的 JDK。
  • 您已下载了 jboss-eap-installation-manager。有关下载 jboss-eap-installation-manager 的更多信息,请参阅 安装指南
  • 您已使用一种受支持的方法下载或安装了 JBoss EAP 8.0。有关下载 JBoss EAP 的更多信息,请参阅 安装指南

流程

  1. 提取您下载的 jboss-eap-installation-manager
  2. 打开终端模拟器,再前往您提取的 jboss-eap-installation-manager 目录。
  3. jboss-eap-installation-manager 目录运行此脚本,以检查可用的更新:

    ./bin/jboss-eap-installation-manager.sh update list --dir eap-xp-5.0
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来更新 JBoss EAP:

    语法

    ./bin/jboss-eap-installation-manager.sh update perform --dir eap-xp-5.0
    Copy to Clipboard Toggle word wrap

    Example

    ./bin/jboss-eap-installation-manager.sh update perform --dir eap-xp-5.0
    Updates found:
      org.wildfly.galleon-plugins:wildfly-galleon-plugins    6.3.1.Final-redhat-00001 ==>  6.3.2.Final-redhat-00001
      org.wildfly.wildfly-http-client:wildfly-http-transaction-client    2.0.1.Final-redhat-00001 ==>  2.0.2.Final-redhat-00001
    Copy to Clipboard Toggle word wrap

您可以使用 jboss-eap-installation-manager 离线更新 JBoss EAP XP 5.0 安装。

先决条件

  • 已安装受支持的 JDK。
  • 您已下载了 jboss-eap-installation-manager。有关下载 jboss-eap-installation-manager 的更多信息,请参阅 安装指南
  • 您已使用一种受支持的方法下载或安装了 JBoss EAP 8.0。有关下载 JBoss EAP 的更多信息,请参阅 安装指南
  • 您已为 JBoss EAP 8.0 和 JBoss EAP XP 5.0 下载并提取了最新的离线存储库。

流程

  1. 停止 JBoss EAP 服务器。
  2. 打开终端模拟器,再导航到 jboss-eap-installation-manager 目录。
  3. jboss-eap-installation-manager 目录运行此脚本,以更新服务器组件:

    ./bin/jboss-eap-installation-manager.sh update perform \
     --dir eap-xp-5.0  \
     --repositories <JBOSS_EAP_XP_OFFLINE_REPO_PATH>,<FEATURE_PACK_OFFLINE_REPO>,<JBOSS_EAP_8.0_OFFLINE_REPO_PATH>
    Copy to Clipboard Toggle word wrap

1.6. 将您的 JBoss EAP XP 服务器恢复到 JBoss EAP

您可以使用 jboss-eap-installation-manager 恢复您的 JBoss EAP XP 安装。

先决条件

  • 您可以访问互联网。
  • 已安装受支持的 JDK。
  • 您已下载了 jboss-eap-installation-manager。有关下载 jboss-eap-installation-manager 的更多信息,请参阅 安装指南
  • 您已使用一种受支持的方法下载或安装了 JBoss EAP 8.0。有关下载 JBoss EAP 的更多信息,请参阅 安装指南

流程

  1. 打开终端模拟器,再导航到 jboss-eap-installation-manager 目录。
  2. jboss-eap-installation-manager 目录运行此脚本,以调查添加到 JBoss EAP XP 服务器的所有功能包的历史记录:

    ./bin/jboss-eap-installation-manager.sh history --dir eap-xp-5.0
    Copy to Clipboard Toggle word wrap
  3. 停止 JBoss EAP XP 服务器。
  4. 在添加 JBoss EAP XP 扩展前将您恢复到一个版本:

    ./bin/jboss-eap-installation-manager.sh revert perform \
     --revision <REVISION_HASH> \
     --dir eap-xp-5.0
    Copy to Clipboard Toggle word wrap

其他资源

第 2 章 了解 MicroProfile

2.1. MicroProfile Config

2.1.1. JBoss EAP 中的 MicroProfile 配置

配置数据可能会动态更改,应用程序需要能够在不重启服务器的情况下访问最新的配置信息。

MicroProfile 配置提供配置数据的可移植外部化。这意味着,您可以将应用程序和微服务配置为在多个环境中运行,而无需修改或重新打包。

MicroProfile 配置功能在 JBoss EAP 中使用 SmallRye Config 组件实施,由 microprofile-config-smallrye 子系统提供。

注意

MicroProfile 配置仅在 JBoss EAP XP 中受支持。JBoss EAP 不支持它。

重要

如果要添加自己的配置实现,则需要在最新版本的 Config 接口中使用方法。

2.1.2. MicroProfile 配置支持的 MicroProfile 配置源

MicroProfile 配置属性可以来自不同的位置,可以采用不同的格式。这些属性由 ConfigSources 提供。ConfigSources 是 org.eclipse.microprofile.config.spi.ConfigSource 接口的实现。

MicroProfile Config 规范提供以下默认 ConfigSource 实施来检索配置值:

  • System.getProperties().
  • system.getenv ().
  • 类路径上的所有 META-INF/microprofile-config.properties 文件。

microprofile-config-smallrye 子系统支持其他类型的 ConfigSource 资源,以检索配置值。您还可以从以下资源中检索配置值:

  • microprofile-config-smallrye/config-source 管理资源中的属性
  • 目录中的文件
  • ConfigSource
  • ConfigSourceProvider

2.2. MicroProfile Fault Tolerance

2.2.1. 关于 MicroProfile Fault Tolerance 规范

MicroProfile 容错规范定义了处理分布式微服务中固有错误的策略。

MicroProfile Fault Tolerance 规范定义了以下策略来处理错误:

Timeout(超时)
定义执行必须完成的时间。定义超时可防止无限期等待执行。
Retry
定义重试失败执行的条件。
fallback
在执行失败时提供替代方法。
CircuitBreaker
定义在临时停止前失败的执行尝试数量。您可以在恢复执行前定义延迟的长度。
壁壁
在系统的一部分隔离故障,以便系统的其余部分仍然可以正常工作。
异步
在单独的线程中执行客户端请求。

2.2.2. JBoss EAP 中的 MicroProfile Fault Tolerance

microprofile-fault-tolerance-smallrye 子系统为 JBoss EAP 中的 MicroProfile Fault Tolerance 提供支持。该子系统仅适用于 JBoss EAP XP 流。

microprofile-fault-tolerance-smallrye 子系统为拦截器绑定提供以下注解:

  • @Timeout
  • @Retry
  • @Fallback
  • @CircuitBreaker
  • @bulkhead
  • @Asynchronous

您可以在类级别或方法级别绑定这些注解。与类绑定的注解适用于该类的所有业务方法。

以下规则适用于绑定拦截器:

  • 如果组件类声明或继承类级拦截器绑定,则应用以下限制:

    • 不得声明该类。
    • 类不得包含任何静态、私有或最终方法。
  • 如果组件类的非静态的、非专用方法声明方法级拦截器绑定,则方法和组件类都不会被声明。

容错操作有以下限制:

  • 容错拦截器绑定必须应用到 bean 类或 bean 类方法。
  • 调用时,调用必须是 Jakarta 上下文和依赖注入规范中定义的业务方法调用。
  • 如果这两个条件都满足,则操作不会被视为容错性:

    • 方法本身不绑定到任何容错拦截器。
    • 包含方法的类没有绑定到任何容错拦截器。

microprofile-fault-tolerance-smallrye 子系统还提供以下配置选项,以及 MicroProfile Fault Tolerance 提供的配置选项:

  • io.smallrye.faulttolerance.mainThreadPoolSize
  • io.smallrye.faulttolerance.mainThreadPoolQueueSize

2.3. MicroProfile Health

2.3.1. JBoss EAP 中的 MicroProfile 健康

JBoss EAP 包含 SmallRye Health 组件,您可以使用它来确定 JBoss EAP 实例是否按预期响应。这个功能会被默认启用。

MicroProfile Health 仅在将 JBoss EAP 作为单机服务器运行时可用。

MicroProfile 健康规范定义以下健康检查:

就绪
确定应用是否准备好处理请求。注释 @Readiness 提供此健康检查。
Liveness
确定应用程序是否正在运行。注释 @Liveness 提供此健康检查。
启动
确定应用程序是否已启动。注释 @Startup 提供此健康检查。

MicroProfile Health 3.0 中删除了 @Health 注释。

MicroProfile Health 3.1 包括一个新的 启动 健康检查探测。

有关 MicroProfile Health 3.1 中的更改的更多信息,请参阅 MicroProfile Health 3.1 的发行说明

重要

:empty-readiness-checks-status,:empty-liveness-checks-status, 和 :empty-startup-checks-status 管理属性在没有定义 就绪度存活度启动探测 时指定全局状态。

2.4. MicroProfile JWT

2.4.1. JBoss EAP 中的 MicroProfile JWT 集成

子系统 microprofile-jwt-smallrye 在 JBoss EAP 中提供 MicroProfile JWT 集成。

microprofile-jwt-smallrye 子系统提供以下功能:

  • 检测使用 MicroProfile JWT 安全性的部署。
  • 激活对 MicroProfile JWT 的支持。

子系统不包含可配置的属性或资源。

除了 microprofile-jwt-smallrye 子系统外,org.eclipse.microprofile.jwt.auth.api 模块在 JBoss EAP 中提供 MicroProfile JWT 集成。

其它资源

MicroProfile JWT 部署不依赖于受管理的 SecurityDomain 资源,如传统 JBoss EAP 部署。相反,会在 MicroProfile JWT 部署中创建并使用虚拟 SecurityDomain。

由于 MicroProfile JWT 部署完全在 MicroProfile 配置属性和 microprofile-jwt-smallrye 子系统内配置,因此虚拟 SecurityDomain 不需要任何其他受管配置。

2.4.3. JBoss EAP 中的 MicroProfile JWT 激活

MicroProfile JWT 根据应用中存在 auth-method 的应用激活。

MicroProfile JWT 集成以以下方式为应用激活:

  • 作为部署过程的一部分,JBoss EAP 扫描应用存档,以了解 auth-method
  • 如果存在 auth-method,并定义为 MP-JWT,则会激活 MicroProfile JWT 集成。

auth-method 可以在以下任一文件或两个文件中指定:

  • 包含扩展 javax.ws.rs.core.Application 的类的文件,并标上 @LoginConfig
  • web.xml 配置文件

如果在类中同时定义了 auth-method,则使用注解,并在 web.xml 配置文件中定义,则会使用 web.xml 配置文件中的定义。

2.4.4. JBoss EAP 中 MicroProfile JWT 的限制

JBoss EAP 中的 MicroProfile JWT 实施存在某些限制。

JBoss EAP 中存在 MicroProfile JWT 实施的限制:

  • MicroProfile JWT 实施仅解析 mp.jwt.verify.publickey 属性中提供的 JSON Web Key Set (JWKS)中的第一个密钥。因此,如果令牌声明在第二个密钥后由第二个密钥或任何密钥签名,令牌将无法验证,且包含令牌的请求不会被授权。
  • 不支持 JWKS 的 Base64 编码。

在这两种情况下,可以引用明文 JWKS,而不使用 mp.jwt.verify.publickey.location 配置属性。

2.5. MicroProfile OpenAPI

2.5.1. JBoss EAP 中的 MicroProfile OpenAPI

MicroProfile OpenAPI 使用 microprofile-openapi-smallrye 子系统在 JBoss EAP 中集成。

MicroProfile OpenAPI 规范定义提供 OpenAPI 3.0 文档的 HTTP 端点。OpenAPI 3.0 文档描述了主机的 REST 服务。OpenAPI 端点使用配置的路径注册,例如 http://localhost:8080/openapi,位于与部署关联的主机的 root 中。

注意

目前,虚拟主机的 OpenAPI 端点只能记录单个部署。要将 OpenAPI 与同一虚拟主机上使用不同上下文路径注册的多个部署一起使用,每个部署都必须使用不同的端点路径。

OpenAPI 端点默认返回一个 YAML 文档。您还可以使用 Accept HTTP 标头或格式查询参数来请求 JSON 文档。

如果给定应用的 Undertow 服务器或主机定义了 HTTPS 侦听器,则使用 HTTPS 提供 OpenAPI 文档。例如,HTTPS 的端点是 https://localhost:8443/openapi

2.6. MicroProfile Telemetry

2.6.1. JBoss EAP 中的 MicroProfile Telemetry

MicroProfile Telemetry 基于 OpenTelemetry 为应用提供追踪功能。能够跨服务边界跟踪请求非常重要,特别是在请求在其生命周期内通过多个服务进行流动的微服务环境中。

MicroProfile Telemetry 在 OpenTelemetry 子系统上扩展,并添加对 MicroProfile 配置的支持。这样,用户可以使用 MicroProfile 配置来配置 OpenTelemetry。

注意

MicroProfile Telemetry 子系统中没有可配置的资源或属性。

2.7. MicroProfile REST Client

2.7.1. MicroProfile REST 客户端

JBoss EAP XP 5.0.0 支持 MicroProfile REST 客户端 2.0,它在 Jakarta RESTful Web Services 2.1.6 客户端 API 上构建,以提供类型安全方法用于通过 HTTP 调用 RESTful 服务。MicroProfile 类型 Safe REST 客户端定义为 Java 接口。借助 MicroProfile REST 客户端,您可以使用可执行代码编写客户端应用。

使用 MicroProfile REST 客户端来提供以下功能:

  • 直观的语法
  • 供应商编程注册
  • 声明性注册供应商
  • 标头声明规格
  • 服务器上的标头传播
  • ResponseExceptionMapper
  • Jakarta 上下文和依赖注入集成
  • 访问服务器事件(SSE)

MicroProfile Config 是规范的名称,开发人员可以用于配置应用和微服务在多个环境中运行,而无需修改或重新打包这些应用程序。在以前的版本中,MicroProfile Config 作为技术预览提供 JBoss EAP,但自此后已被删除。MicroProfile 配置现在仅适用于 JBoss EAP XP。

定义 resteasy.original.webapplicationexception.behavior MicroProfile Config 属性

您可以将 resteasy.original.webapplicationexception.behavior 参数设置为 web.xml servlet 属性或系统属性。以下是 web.xml 中的一个此类 servlet 属性的示例:

<context-param>
    <param-name>resteasy.original.webapplicationexception.behavior</param-name>
    <param-value>true</param-value>
</context-param>
Copy to Clipboard Toggle word wrap

您还可以使用 MicroProfile 配置来配置任何其他 RESTEasy 属性。

2.8. MicroProfile 被动消息

2.8.1. MicroProfile 被动消息

当您升级到 JBoss EAP XP 5.0.0 时,您可以启用 MicroProfile 被动消息的最新版本,其中包括被动消息扩展和子系统。

"主动流"是事件数据的连续性,以及处理协议和标准,这些边界在异步边界(如调度程序)之间推送,无需任何缓冲。例如,"event"可能是一次调度并重复温度检查,例如:被动流的主要优点是各种应用程序和实现的无缝互操作性。

主动消息传递提供了一个框架,用于构建事件驱动的、数据流和事件源应用程序。被动消息会导致事件数据(被动流)从一个应用程序到另一个应用程序进行持续、平稳的交换。您可以通过被动流将 MicroProfile 被动消息用于异步消息传递,以便您的应用可以和 Apache Kafka 等其他交互。

将 MicroProfile 主动消息传递实例升级到最新版本后,您可以执行以下操作:

  • 为 Apache Kafka 数据流平台置备带有 MicroProfile 被动消息的服务器。
  • 通过最新的被动消息传递 API 与被动消息传递内存交互,并由 Apache Kafka 主题支持。
  • 使用任何可用指标系统来确定给定频道中流的消息数量。

2.8.2. MicroProfile 被动消息连接器

您可以使用连接器将 MicroProfile 被动消息与多个外部消息传递系统集成。适用于 JBoss EAP 的 MicroProfile 附带 Apache Kafka 连接器和高级消息队列协议(AMQP)连接器。使用 Eclipse MicroProfile 配置规范来配置您的连接器。

MicroProfile 被动消息连接器并纳入了层

MicroProfile 被动消息传递包括以下连接器:

  • Kafka 连接器

    microprofile-reactive-messaging-kafka 层包含 Kafka 连接器。

  • AMQP 连接器

    microprofile-reactive-messaging-amqp 层包含 AMQP 连接器。

两个连接器层都包含 microprofile-reactive-messaging Galleon 层。microprofile-reactive-messaging 层提供核心 MicroProfile 被动消息传递功能。

Expand
表 2.1. 主动消息和连接器 Galleon 层
layer定义

microprofile-reactive-streams-operators

  • 提供 MicroProfile 被动流 Operator API 和支持实施模块。
  • 包含带有 SmallRye 扩展和子系统的 MicroProfile 被动流 Operator。
  • 依赖于 cdi 层。

    • CDI 代表 Jakarta 上下文和依赖注入;提供添加 @Inject 功能的子系统。

microprofile-reactive-messaging

  • 提供 MicroProfile 被动消息 API 和支持实施模块。
  • 包含带有 SmallRye 扩展和子系统的 MicroProfile。
  • 依赖于 microprofile-configmicroprofile-reactive-streams-operators 层。

microprofile-reactive-messaging-kafka

  • 提供 Kafka 连接器模块,使 MicroProfile 被动消息传递与 Kafka 交互。
  • 依赖于 microprofile-reactive-messaging 层。

microprofile-reactive-messaging-amqp

  • 提供 AMQP 连接器模块,使 MicroProfile 被动消息传递能够与 AMQP 客户端交互。
  • 依赖于 microprofile-reactive-messaging 层。

2.8.3. Apache Kafka 事件流平台

Apache Kafka 是一个开源分布式事件(数据)流平台,可实时发布、订阅、存储和流程记录流。它处理来自多个源的事件流,并将其传送到多个消费者,将大量数据从点 A 移到 Z,并同时将大量数据移到 Z。MicroProfile 被动消息传递使用 Apache Kafka 在几秒内提供这些事件记录,将它们安全地存储在分布式、容错型集群中,同时保持它们可在任何团队定义的区域或地理区域中可用。

第 3 章 在 JBoss EAP 中管理 MicroProfile

3.1. MicroProfile 遥测管理

MicroProfile 遥测组件通过 microprofile-telemetry 子系统集成到默认的 MicroProfile 配置中。如果尚未包含子系统,您还可以使用管理 CLI 添加 MicroProfile 遥测子系统。

先决条件

  • 在添加 MicroProfile Telemetry 子系统之前,必须将 OpenTelemetry 子系统添加到配置中。MicroProfile 遥测子系统依赖于 OpenTelemetry 子系统。

流程

  1. 打开终端。
  2. 运行以下命令:

    $ <JBOSS_HOME>/bin/jboss-cli.sh -c <<EOF
        if (outcome != success) of /subsystem=opentelemetry:read-resource
            /extension=org.wildfly.extension.opentelemetry:add()
            /subsystem=opentelemetry:add()
        end-if
        /extension=org.wildfly.extension.microprofile.telemetry:add
        /subsystem=microprofile-telemetry:add
        reload
    EOF
    Copy to Clipboard Toggle word wrap

3.1.2. 启用 MicroProfile Telemetry 子系统

MicroProfile Telemetry 默认为禁用,必须基于每个应用程序启用。

先决条件

  • MicroProfile Telemetry 子系统已添加到配置中。
  • OpenTelemetry 子系统已添加到配置中。

流程

  1. 打开 microprofile-config.properties 文件。
  2. otel.sdk.disabled 属性设置为 false

    otel.sdk.disabled=false
    Copy to Clipboard Toggle word wrap

3.1.3. 使用 MicroProfile 配置覆盖服务器配置

您可以使用 MicroProfile Config 覆盖 MicroProfile Telemetry 子系统中个别应用的服务器配置。

例如,导出的 trace 中使用的服务名称与部署存档相同。如果部署存档设置为 my-application-1.0.war,则服务名称将相同。要覆盖此配置,您可以更改配置文件中的 otel.service.name 属性的值:

otel.service.name=My Application
Copy to Clipboard Toggle word wrap

3.2. MicroProfile 配置配置

3.2.1. 在 ConfigSource 管理资源中添加属性

您可以将属性直接作为管理资源存储在 config-source 子系统中。

流程

  • 创建 ConfigSource 并添加属性:

    /subsystem=microprofile-config-smallrye/config-source=props:add(properties={"name" = "jim"})
    Copy to Clipboard Toggle word wrap

3.2.2. 将目录配置为 ConfigSources

当属性作为文件存储在目录中时,file-name 是属性的名称,文件内容是 属性的值。

流程

  1. 创建要存储文件的目录:

    $ mkdir -p ~/config/prop-files/
    Copy to Clipboard Toggle word wrap
  2. 进入该目录:

    $ cd ~/config/prop-files/
    Copy to Clipboard Toggle word wrap
  3. 创建一个 文件名 来存储属性名称 的值:

    $ touch name
    Copy to Clipboard Toggle word wrap
  4. 将 属性的值添加到文件中:

    $ echo "jim" > name
    Copy to Clipboard Toggle word wrap
  5. 创建一个 ConfigSource,其中文件名是 属性,文件内容是 属性的值:

    /subsystem=microprofile-config-smallrye/config-source=file-props:add(dir={path=~/config/prop-files})
    Copy to Clipboard Toggle word wrap

    这会生成以下 XML 配置:

    <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
        <config-source name="file-props">
            <dir path="/etc/config/prop-files"/>
        </config-source>
    </subsystem>
    Copy to Clipboard Toggle word wrap

3.2.3. 将根目录配置为 ConfigSources

您可以使用 root 属性将目录定义为多个 MicroProfile ConfigSource 目录 的根目录

嵌套的 root 属性是 /subsystem=microprofile-config-smallrye/config-source swig 资源的 dir complex 属性的一部分。如果共享同一根目录,这消除了需要指定多个 ConfigSource 目录。

直接根目录中的任何文件都会被忽略。它们将不会用于配置。顶级目录被视为 ConfigSources。任何嵌套的目录也会被忽略。

注意

默认情况下,顶层目录的 ConfigSources 被分配 /subsystem=microprofile-config-smallrye/config-source resourcesordinal

如果顶级目录包含 config_ordinal 文件,则文件中指定的值将 覆盖默认值 ordinal 值。如果具有相同 ordinal 的两个顶级目录包含同一条目,则目录的名称将按字母顺序排序,并使用第一个目录。

先决条件

  • 已安装 MicroProfile Config 扩展,并启用了 microprofile-config-smallrye 子系统。

流程

  1. 打开终端。
  2. 创建要存储文件的目录:

    mkdir -p ~/etc/config/prop-files/
    Copy to Clipboard Toggle word wrap
  3. 进入您创建的目录:

    cd ~/etc/config/prop-files/
    Copy to Clipboard Toggle word wrap
  4. 创建一个 文件名 来存储属性名称 的值:

    touch name
    Copy to Clipboard Toggle word wrap
  5. 将 属性的值添加到文件中:

    echo "jim" > name
    Copy to Clipboard Toggle word wrap
  6. 在 CLI 中运行以下命令,创建一个 ConfigSource,其中 filename 是属性,且文件包含属性值:

    /subsystem=microprofile-config-smallrye/config-source=prop-files:add(dir={path=/etc/config, root=true})
    Copy to Clipboard Toggle word wrap
  7. 这会导致 XML 配置:

    <subsystem
    xmlns="urn:wildfly:microprofile-config-smallrye:2.0">
     <config-source name="prop-files">
       <dir path="/etc/config" root="true"/>
     </config-source>
    </subsystem>
    Copy to Clipboard Toggle word wrap

3.2.4. 从 ConfigSource 类获取 ConfigSource

您可以创建并配置自定义 org.eclipse.microprofile.config.spi.ConfigSource 实施类,以便为配置值提供源。

流程

  • 以下管理 CLI 命令为名为 org.example.MyConfigSource 的实施类创建一个 ConfigSource,它由名为 org.example 的 JBoss 模块提供。

    如果要使用 org.example 模块中的 ConfigSource,请将 < module name="org.eclipse.microprofile.config.api"/> 依赖项添加到 path/to/org/example/main/module.xml 文件。

    /subsystem=microprofile-config-smallrye/config-source=my-config-source:add(class={name=org.example.MyConfigSource, module=org.example})
    Copy to Clipboard Toggle word wrap

    此命令生成 microprofile-config-smallrye 子系统的以下 XML 配置:

    <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
        <config-source name="my-config-source">
            <class name="org.example.MyConfigSource" module="org.example"/>
        </config-source>
    </subsystem>
    Copy to Clipboard Toggle word wrap

自定义 org.eclipse.microprofile.config.spi.ConfigSource 实施类提供的属性可用于任何 JBoss EAP 部署。

您可以创建并配置自定义 org.eclipse.microprofile.config.spi.ConfigSourceProvider 实施,该类注册多个 ConfigSource 实例的实施。

流程

  • 创建 config-source-provider

    /subsystem=microprofile-config-smallrye/config-source-provider=my-config-source-provider:add(class={name=org.example.MyConfigSourceProvider, module=org.example})
    Copy to Clipboard Toggle word wrap

    命令为名为 org.example.MyConfigSourceProvider 的实现类创建一个名为 org.example.MyConfigSourceProviderconfig-source-provider,它由名为 org.example 的 JBoss 模块提供。

    如果要使用 org.example 模块中的 config-source-provider,请将 < module name="org.eclipse.microprofile.config.api"/> 依赖项添加到 path/to/org/example/main/module.xml 文件。

    此命令生成 microprofile-config-smallrye 子系统的以下 XML 配置:

    <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0">
        <config-source-provider name="my-config-source-provider">
             <class name="org.example.MyConfigSourceProvider" module="org.example"/>
        </config-source-provider>
    </subsystem>
    Copy to Clipboard Toggle word wrap

ConfigSourceProvider 实现提供的属性可用于任何 JBoss EAP 部署。

3.3. MicroProfile Fault Tolerance 配置

3.3.1. 添加 MicroProfile Fault Tolerance 扩展

MicroProfile Fault Tolerance 扩展包含在 standalone-microprofile.xmlstandalone-microprofile-ha.xml 配置中,它们作为 JBoss EAP XP 的一部分提供。

扩展不包含在标准 standalone.xml 配置中。要使用扩展,您必须手动启用它。

先决条件

  • 已安装带有 JBoss EAP XP 5.0 的 JBoss EAP 8.0。

流程

  1. 使用以下管理 CLI 命令添加 MicroProfile Fault Tolerance 扩展:

    /extension=org.wildfly.extension.microprofile.fault-tolerance-smallrye:add
    Copy to Clipboard Toggle word wrap
  2. 使用以下 managenent 命令启用 microprofile-fault-tolerance-smallrye 子系统:

    /subsystem=microprofile-fault-tolerance-smallrye:add
    Copy to Clipboard Toggle word wrap
  3. 使用以下管理命令重新载入服务器:

    reload
    Copy to Clipboard Toggle word wrap

3.4. MicroProfile 健康配置

3.4.1. 使用管理 CLI 检查健康状况

您可以使用管理 CLI 检查系统健康状况。

流程

  • 检查健康状况:

    /subsystem=microprofile-health-smallrye:check
    {
        "outcome" => "success",
        "result" => {
            "status" => "UP",
            "checks" => []
        }
    }
    Copy to Clipboard Toggle word wrap

3.4.2. 使用管理控制台检查健康状况

您可以使用管理控制台检查系统健康状况。

检查运行时操作以布尔值的形式显示健康检查和全局结果。

流程

  1. 导航到 Runtime 选项卡,再选择服务器。
  2. Monitor 列中,点 MicroProfile HealthView

3.4.3. 使用 HTTP 端点检查健康状况

健康检查自动部署到 JBoss EAP 上的健康上下文,因此您可以使用 HTTP 端点获取当前的健康状况。

/health 端点的默认地址(可从管理界面访问)是 http://127.0.0.1:9990/health

流程

  • 要使用 HTTP 端点获取服务器当前健康状况,请使用以下 URL:

    http://<host>:<port>/health
    Copy to Clipboard Toggle word wrap

    访问此上下文以 JSON 格式显示健康检查,指示服务器是否正常运行。

3.4.4. 为 MicroProfile 健康启用身份验证

您可以将 健康 上下文配置为需要身份验证才能访问。

流程

  1. microprofile-health-smallrye 子系统上,将 security-enabled 属性设置为 true

    /subsystem=microprofile-health-smallrye:write-attribute(name=security-enabled,value=true)
    Copy to Clipboard Toggle word wrap
  2. 重新加载服务器,使更改生效。

    reload
    Copy to Clipboard Toggle word wrap

任何后续尝试访问 /health 端点的尝试都会触发身份验证提示。

JBoss EAP XP 5.0.0 支持三个就绪度探测来确定服务器健康和就绪状态。

  • 当 server-state 运行时server-status - 返回 UP
  • 当探测没有检测到引导错误时,boot-errors - 返回 UP
  • 当所有部署的状态为 OK 时,Deployment-status - 返回 UP

这些就绪度探测默认为启用。您可以使用 MicroProfile Config 属性 mp.health.disable-default-procedures 禁用探测。

以下示例演示了在 check 操作中使用三个探测:

[standalone@localhost:9990 /] /subsystem=microprofile-health-smallrye:check
{
    "outcome" => "success",
    "result" => {
        "status" => "UP",
        "checks" => [
            {
                "name" => "boot-errors",
                "status" => "UP"
            },
            {
                "name" => "server-state",
                "status" => "UP",
                "data" => {"value" => "running"}
            },
            {
                "name" => "empty-readiness-checks",
                "status" => "UP"
            },
            {
                "name" => "deployments-status",
                "status" => "UP"
            },
            {
                "name" => "empty-liveness-checks",
                "status" => "UP"
            },
            {
                "name" => "empty-startup-checks",
                "status" => "UP"
            }
        ]
    }
}
Copy to Clipboard Toggle word wrap

3.4.6. 没有定义探测时的全局状态

:empty-readiness-checks-status,:empty-liveness-checks-status, 和 :empty-startup-checks-status 管理属性在没有定义 就绪度存活度启动探测 时指定全局状态。

这些属性允许应用程序报告 'DOWN',直到其探测验证应用是否已就绪、实时或启动。默认情况下,应用程序会报告 'UP'。

  • 如果未定义就绪度探测,则 :empty- readiness -checks-status 属性指定 就绪度探测 的全局状态:

    /subsystem=microprofile-health-smallrye:read-attribute(name=empty-readiness-checks-status)
    {
        "outcome" => "success",
        "result" => expression "${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}"
    }
    Copy to Clipboard Toggle word wrap
  • 如果未定义存活度探测,则 :empty- liveness -checks-status 属性指定 存活度探测 的全局状态:

    /subsystem=microprofile-health-smallrye:read-attribute(name=empty-liveness-checks-status)
    {
        "outcome" => "success",
        "result" => expression "${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}"
    }
    Copy to Clipboard Toggle word wrap
  • 如果未定义启动探测,则 :empty- startup -checks-status 属性指定 启动探测 的全局状态:

    /subsystem=microprofile-health-smallrye:read-attribute(name=empty-startup-checks-status)
    {
        "outcome" => "success",
        "result" => expression "${env.MP_HEALTH_EMPTY_STARTUP_CHECKS_STATUS:UP}"
    }
    Copy to Clipboard Toggle word wrap

    检查 就绪度存活度 和启动 探测的 /health HTTP 端点和 :check 操作也会考虑这些属性。

您还可以修改这些属性,如下例所示:

/subsystem=microprofile-health-smallrye:write-attribute(name=empty-readiness-checks-status,value=DOWN)
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}
Copy to Clipboard Toggle word wrap

3.5. MicroProfile JWT 配置

3.5.1. 启用 microprofile-jwt-smallrye 子系统

MicroProfile JWT 集成由 microprofile-jwt-smallrye 子系统提供,并包含在默认配置中。如果默认配置中没有子系统,您可以添加它,如下所示:

先决条件

  • 已安装带有 JBoss EAP XP 5.0 的 JBoss EAP 8.0。

流程

  1. 在 JBoss EAP 中启用 MicroProfile JWT smallrye 扩展:

    /extension=org.wildfly.extension.microprofile.jwt-smallrye:add
    Copy to Clipboard Toggle word wrap
  2. 启用 microprofile-jwt-smallrye 子系统:

    /subsystem=microprofile-jwt-smallrye:add
    Copy to Clipboard Toggle word wrap
  3. 重新载入服务器:

    reload
    Copy to Clipboard Toggle word wrap

microprofile-jwt-smallrye 子系统已启用。

3.6. MicroProfile OpenAPI 管理

3.6.1. 启用 MicroProfile OpenAPI

microprofile-openapi-smallrye 子系统在 standalone-microprofile.xml 配置中提供。但是,JBoss EAP XP 默认使用 standalone.xml。您必须在 standalone.xml 中包含子系统才能使用它。

或者,您也可以按照使用 MicroProfile 子系统和扩展更新独立配置 的步骤进行操作,以更新 standalone.xml 配置文件。

流程

  1. 在 JBoss EAP 中启用 MicroProfile OpenAPI smallrye 扩展:

    /extension=org.wildfly.extension.microprofile.openapi-smallrye:add()
    Copy to Clipboard Toggle word wrap
  2. 使用以下管理命令启用 microprofile-openapi-smallrye 子系统:

    /subsystem=microprofile-openapi-smallrye:add()
    Copy to Clipboard Toggle word wrap
  3. 重新加载服务器。

    reload
    Copy to Clipboard Toggle word wrap

microprofile-openapi-smallrye 子系统已启用。

使用 Accept HTTP 标头从部署请求 MicroProfile OpenAPI 文档。

默认情况下,OpenAPI 端点会返回 YAML 文档。

先决条件

  • 正在查询的部署被配置为返回 MicroProfile OpenAPI 文档。

流程

  • 发出以下 curl 命令查询部署的 /openapi 端点:

    $ curl -v -H'Accept: application/json' http://localhost:8080/openapi
    < HTTP/1.1 200 OK
    ...
    {"openapi": "3.0.1" ... }
    Copy to Clipboard Toggle word wrap

    使用部署的 URL 和端口替换 http://localhost:8080

    Accept 标头指示将使用 application/json 字符串返回 JSON 文档。

3.6.3. 使用 HTTP 参数请求 MicroProfile OpenAPI 文档

使用 HTTP 请求中的查询参数,从部署请求以 JSON 格式请求 MicroProfile OpenAPI 文档。

默认情况下,OpenAPI 端点会返回 YAML 文档。

先决条件

  • 正在查询的部署被配置为返回 MicroProfile OpenAPI 文档。

流程

  • 发出以下 curl 命令查询部署的 /openapi 端点:

    $ curl -v http://localhost:8080/openapi?format=JSON
    < HTTP/1.1 200 OK
    ...
    Copy to Clipboard Toggle word wrap

    使用部署的 URL 和端口替换 http://localhost:8080

    HTTP 参数 format=JSON 表示要返回 JSON 文档。

3.6.4. 配置 JBoss EAP 以提供静态 OpenAPI 文档

配置 JBoss EAP 以提供描述主机的 REST 服务的静态 OpenAPI 文档。

当 JBoss EAP 配置为提供静态 OpenAPI 文档时,将在任何 Jakarta RESTful Web 服务和 MicroProfile OpenAPI 注解之前处理静态 OpenAPI 文档。

在生产环境中,在提供静态文档时禁用注解处理。禁用注解处理可确保客户端可以使用不可变和版本的 API 合同。

流程

  1. 在应用程序源树中创建目录:

    $ mkdir APPLICATION_ROOT/src/main/webapp/META-INF
    Copy to Clipboard Toggle word wrap

    APPLICATION_ROOT 是包含应用的 pom.xml 配置文件的目录。

  2. 查询 OpenAPI 端点,将输出重定向到文件:

    $ curl http://localhost:8080/openapi?format=JSON > src/main/webapp/META-INF/openapi.json
    Copy to Clipboard Toggle word wrap

    默认情况下,端点提供 YAML 文档,format=JSON 指定返回 JSON 文档。

  3. 配置应用程序,以便在处理 OpenAPI 文档模型时跳过注解扫描:

    $ echo "mp.openapi.scan.disable=true" > APPLICATION_ROOT/src/main/webapp/META-INF/microprofile-config.properties
    Copy to Clipboard Toggle word wrap
  4. 重建应用程序:

    $ mvn clean install
    Copy to Clipboard Toggle word wrap
  5. 使用以下管理 CLI 命令再次部署应用程序:

    1. 取消部署应用程序:

      undeploy microprofile-openapi.war
      Copy to Clipboard Toggle word wrap
    2. 部署应用程序:

      deploy APPLICATION_ROOT/target/microprofile-openapi.war
      Copy to Clipboard Toggle word wrap

JBoss EAP 现在在 OpenAPI 端点上提供静态 OpenAPI 文档。

3.6.5. 禁用 microprofile-openapi-smallrye

您可以使用管理 CLI 在 JBoss EAP XP 中禁用 microprofile-openapi-smallrye 子系统。

流程

  • 禁用 microprofile-openapi-smallrye 子系统:

    /subsystem=microprofile-openapi-smallrye:remove()
    Copy to Clipboard Toggle word wrap

3.7. MicroProfile Reactive 消息传递管理

如果要启用 JBoss EAP 实例的异步被动消息传递,您必须通过 JBoss EAP 管理 CLI 添加其扩展。

先决条件

流程

  1. 打开 JBoss EAP 管理 CLI。
  2. 输入以下代码:
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.reactive-messaging-smallrye:add
{"outcome" => "success"}

[standalone@localhost:9990 /] /subsystem=microprofile-reactive-messaging-smallrye:add
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}
Copy to Clipboard Toggle word wrap
注意

如果您使用 Galleon 在 OpenShift 上置备服务器,请确保包含 microprofile-reactive-messaging Galleon 层来获取核心 MicroProfile 2.0.1 和被动消息传递功能,以及启用所需的子系统和扩展。请注意,此配置不包含启用连接器所需的 JBoss EAP 模块。使用 microprofile-reactive-messaging-kafka 层或 microprofile-reactive-messaging-amqp 层分别启用 Kafka 连接器或 AMQP 连接器。

验证

如果您在管理 CLI 的两个位置中看到 成功,则已成功为 JBoss EAP 添加了所需的 MicroProfile 被动消息传递扩展和子系统。

提示

如果生成的代码显示 reload-required,您必须重新加载服务器配置以完全应用所有更改。要重新加载,请在单机服务器 CLI 中输入 reload

3.8. 独立服务器配置

3.8.1. 独立服务器配置文件

JBoss EAP XP 包括额外的单机服务器配置文件 standalone-microprofile.xmlstandalone-microprofile-ha.xml

JBoss EAP 中包含的标准配置文件保持不变。请注意,JBoss EAP XP 5.0.0 不支持使用 domain.xml 文件或域模式。

Expand
表 3.1. JBoss EAP XP 中的独立配置文件
配置文件用途包括的功能排除的功能

standalone.xml

这是启动单机服务器时使用的默认配置。

包括服务器的相关信息,包括子系统、网络、部署、套接字绑定和其他可配置的详细信息。

排除消息传递或高可用性所需的子系统。

standalone-microprofile.xml

此配置文件支持使用 MicroProfile 的应用。

包括服务器的相关信息,包括子系统、网络、部署、套接字绑定和其他可配置的详细信息。

排除以下功能:

  • Jakarta Enterprise Beans
  • 消息传递
  • Jakarta EE Batch
  • jakarta Server Faces
  • Jakarta Enterprise Beans 计时器

standalone-ha.xml

 

包含默认子系统,并添加 modclusterjgroups 子系统以实现高可用性。

排除消息传递所需的子系统。

standalone-microprofile-ha.xml

此独立文件支持使用 MicroProfile 的应用。

包括 modclusterjgroups 子系统,以便在默认子系统之外实现高可用性。

排除消息传递所需的子系统。

standalone-full.xml

 

除了默认子系统外,还包括 messaging-activemqiiop-openjdk 子系统。

 

standalone-full-ha.xml

支持每个可能的子系统。

除了默认子系统外,还包括消息传递和高可用性的子系统。

 

standalone-load-balancer.xml

支持使用内置 mod_cluster 前端负载平衡器对其他 JBoss EAP 实例进行负载平衡所需的最小子系统。

  

默认情况下,将 JBoss EAP 作为单机服务器启动使用 standalone.xml 文件。若要使用独立 MicroProfile 配置启动 JBoss EAP,可使用 -c 参数。例如,

$ <EAP_HOME>/bin/standalone.sh -c=standalone-microprofile.xml
Copy to Clipboard Toggle word wrap

您可以使用 docs/examples/enable-microprofile.cli 脚本使用 MicroProfile 子系统和扩展来更新标准单机服务器配置文件。enable-microprofile.cli 脚本旨在作为示例脚本,用于更新标准单机服务器配置文件,而不是自定义配置。

enable-microprofile.cli 脚本修改现有的单机服务器配置,并在独立配置文件中不存在以下 MicroProfile 子系统和扩展:

  • microprofile-config-smallrye
  • microprofile-fault-tolerance-smallrye
  • microprofile-health-smallrye
  • microprofile-jwt-smallrye
  • microprofile-openapi-smallrye

enable-microprofile.cli 脚本输出修改的高级描述。配置使用 elytron 子系统进行保护。security 子系统(如果存在)已从配置中删除。

先决条件

  • 已安装带有 JBoss EAP XP 5.0 的 JBoss EAP 8.0。

流程

  1. 运行以下 CLI 脚本以更新默认的 standalone.xml 服务器配置文件:

    $ <EAP_HOME>/bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令,选择默认 standalone.xml 服务器配置文件以外的独立服务器配置:

    $ <EAP_HOME>/bin/jboss-cli.sh --file=docs/examples/enable-microprofile.cli -Dconfig=<standalone-full.xml|standalone-ha.xml|standalone-full-ha.xml>
    Copy to Clipboard Toggle word wrap
  3. 指定的配置文件现在包含 MicroProfile 子系统和扩展。

第 4 章 为 JBoss EAP 开发 MicroProfile 应用程序

要开始开发使用 MicroProfile API 的应用,请创建一个 Maven 项目并定义所需的依赖项。使用 JBoss EAP MicroProfile Bill of Materials (BOM)来控制应用项目对象模型(POM)中的运行时 Maven 依赖项版本。

创建 Maven 项目后,请参考 JBoss EAP XP Quickstarts,以了解有关为特定 MicroProfile API 开发应用的信息。如需更多信息,请参阅 JBoss EAP XP Quickstarts

4.1. 使用 maven-archetype-webapp创建 Maven 项目

使用 maven-archetype-webapp archetype 创建一个 Maven 项目,用于构建用于 JBoss EAP 部署的应用程序。Maven 根据特定于项目类型的模板,为创建项目提供不同的架构类型。maven-archetype-webapp 创建一个项目,其中包含开发简单 Web 应用所需的结构。

先决条件

流程

  1. 使用 mvn 命令设置 Maven 项目。该命令创建项目的目录结构以及 pom.xml 配置文件。

    $ mvn archetype:generate                       \
    -DgroupId=<group_id>                           \
    1
    
    -DartifactId=<artifact_id>                     \
    2
    
    -DarchetypeGroupId=org.apache.maven.archetypes \
    3
    
    -DarchetypeArtifactId=maven-archetype-webapp   \
    4
    
    -DinteractiveMode=false                         
    5
    Copy to Clipboard Toggle word wrap
    1
    GroupId 唯一标识项目。
    2
    artifactId 是生成的 jar 归档的名称。
    3
    archetypeGroupIDmaven-archetype-webapp 的唯一 ID。
    4
    archetypeArtifactIdmaven-archetype-webapp 的工件 ID。
    5
    InteractiveMode 指示 Maven 使用提供的参数,而不是以交互模式启动。
  2. 进入生成的目录。
  3. 在文本编辑器中打开生成的 pom.xml 配置文件。
  4. 在 <name& gt; helloworld Maven Webapp</name> 行后,删除 pom.xml 配置文件的 <project > 部分的内容。

    确保该文件类似如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>${group_id}</groupId>
        <artifactId>${artifact_id}</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>${artifact_id} Maven Webapp</name>
    
    </project>
    Copy to Clipboard Toggle word wrap

    删除内容,因为应用程序不需要它。

4.2. 在 Maven 项目中定义属性

您可以在 Maven pom.xml 配置文件中定义属性,以放置值拥有者。将 JBoss EAP XP 服务器的值定义为在配置中一致使用值的属性。

先决条件

流程

  • 定义属性 & lt;version.bom.microprofile > 作为您要在其上部署配置的应用程序的 JBoss EAP XP 版本。

    <project>
        ...
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
            <version.bom.microprofile>5.0.0.GA-redhat-00009</version.bom.microprofile>
        </properties>
    </project>
    Copy to Clipboard Toggle word wrap

4.3. 在 Maven 项目中定义存储库

定义工件和插件存储库,Maven 会在其中查找要下载的工件和插件。

先决条件

流程

  1. 定义 artifacts 存储库。

    <project>
        ...
        <repositories>
            <repository>                                                                
    1
    
                <id>jboss-public-maven-repository</id>
                <name>JBoss Public Maven Repository</name>
                <url>https://repository.jboss.org/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>never</updatePolicy>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>never</updatePolicy>
                </snapshots>
                <layout>default</layout>
            </repository>
            <repository>                                                                
    2
    
                <id>redhat-ga-maven-repository</id>
                <name>Red Hat GA Maven Repository</name>
                <url>https://maven.repository.redhat.com/ga/</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>never</updatePolicy>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>never</updatePolicy>
                </snapshots>
                <layout>default</layout>
            </repository>
        </repositories>
    </project>
    Copy to Clipboard Toggle word wrap
    1
    Red Hat GA Maven 存储库提供所有产品化 JBoss EAP 和其他红帽工件。
    2
    JBoss Public Maven Repository 提供工件,如 WildFly Maven 插件
  2. 定义插件存储库。

    <project>
        ...
        <pluginRepositories>
            <pluginRepository>
                <id>jboss-public-maven-repository</id>
                <name>JBoss Public Maven Repository</name>
                <url>https://repository.jboss.org/nexus/content/groups/public/</url>
                <releases>
                   <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
            <pluginRepository>
                <id>redhat-ga-maven-repository</id>
                <name>Red Hat GA Maven Repository</name>
                <url>https://maven.repository.redhat.com/ga/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
    </project>
    Copy to Clipboard Toggle word wrap

导入 JBoss EAP MicroProfile Bill of Materials (BOM),以控制运行时 Maven 依赖项的版本。当您在 < dependencyManagement& gt; 部分中指定 BOM 时,您不需要单独指定 提供 的范围中定义的 Maven 依赖项版本。

先决条件

流程

  1. pom.xml 配置文件的 properties 部分中,为 BOM 版本添加属性。

    <properties>
        ...
        <version.bom.microprofile>5.0.0.GA-redhat-00009</version.bom.microprofile>
    </properties>
    Copy to Clipboard Toggle word wrap

    属性 < version.bom.microprofile& gt; 中定义的值用作 BOM 版本的值。

  2. 导入 JBoss EAP BOMs 依赖项管理。

    <project>
        ...
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.jboss.bom</groupId>                   
    1
    
                    <artifactId>jboss-eap-xp-microprofile</artifactId> 
    2
    
                    <version>${version.bom.microprofile}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>
    Copy to Clipboard Toggle word wrap
    1
    JBoss EAP 提供的 BOM 的 GroupId。
    2
    提供支持的 JBoss EAP MicroProfile API 的 JBoss EAP 提供的 BOM 的 artifactId。

另外,您可以将带有 Tools Bill 的 JBoss EAP EE 导入到您的项目。如需更多信息,请参阅在 Maven 项目中导入 JBoss EAP BOMs 作为依赖项管理

您可以选择使用工具 Bill of materials (BOM)导入 JBoss EAP EE。JBoss EAP BOM 提供受支持的 JBoss EAP Java EE API 以及额外的 JBoss EAP API JAR 和客户端 BOM。只有在应用程序需要 Jakarta EE API 外,除了 Microprofile API 外,您只需要导入此 BOM。

先决条件

流程

  1. pom.xml 配置文件的 properties 部分中,为 BOM 版本添加属性。

    <properties>
        ....
        <version.bom.ee>8.0.0.GA-redhat-00009</version.bom.ee>
    </properties>
    Copy to Clipboard Toggle word wrap
  2. 导入 JBoss EAP BOMs 依赖项管理。

    <project>
        ...
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.jboss.bom</groupId>                 
    1
    
                    <artifactId>jboss-eap-ee-with-tools</artifactId> 
    2
    
                    <version>${version.bom.ee}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>
    Copy to Clipboard Toggle word wrap
    1
    JBoss EAP 提供的 BOM 的 GroupId。
    2
    提供支持的 JBoss EAP Java EE API 的 JBoss EAP 提供的 artifactId,以及额外的 JBoss EAP API JAR 和客户端 BOM,以及 Arquillian 等开发工具。

4.6. 在 Maven 项目中添加插件管理

将 Maven 插件管理部分添加到 pom.xml 配置文件中,以获取 Maven CLI 命令所需的插件。

先决条件

流程

  1. 在 < properties > 部分中,定义 wildfly-maven-pluginmaven-war-plugin 的版本。

    <properties>
        ...
        <version.plugin.wildfly>4.2.1.Final</version.plugin.wildfly>
        <version.plugin.war>3.3.2</version.plugin.war>
    </properties>
    Copy to Clipboard Toggle word wrap
  2. 在 & lt; project> 部分的 & lt;build&gt; 部分添加 <pluginManagement &gt; 部分。

    <project>
        ...
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>    
    1
    
                        <groupId>org.wildfly.plugins</groupId>
                        <artifactId>wildfly-maven-plugin</artifactId>
                        <version>${version.plugin.wildfly}</version>
                    </plugin>
                    <plugin>                                  
    2
    
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>${version.plugin.war}</version>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </project>
    Copy to Clipboard Toggle word wrap
    1
    您可以使用 wildfly-maven-plugin 使用 wildfly:deploy 命令将应用部署到 JBoss EAP。
    2
    您需要管理 war 插件版本,以确保与 JDK17+ 兼容。

4.7. 验证 maven 项目

验证您配置的 Maven 项目。

先决条件

流程

  • 安装在本地的 pom.xml 中添加的 Maven 依赖项。

    $ mvn package
    Copy to Clipboard Toggle word wrap

    您会看到类似如下的输出:

    ...
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    ...
    Copy to Clipboard Toggle word wrap

有关为特定 MicroProfile API 开发应用的更多信息,请参阅 JBoss EAP XP Quickstarts

第 5 章 了解 Micrometer 集成

5.1. JBoss EAP 中的 Micrometer

JBoss EAP 中的微主题集成引入了一个厂商中立的可观察层,它带有一个可重复使用的 API,用于跨应用注册和跟踪性能指标。此扩展与 Micrometer 集成,允许已部署的应用访问其 API 并显示应用特定指标以及扩展提供的服务器指标。

注意

JBoss EAP 使用现有的 日志记录子系统。您必须手动添加和配置此扩展。

第 6 章 在 JBoss EAP 中管理 Micrometer

6.1. 使用管理 CLI 添加 Micrometer 子系统

Micrometer 子系统通过促进全面的指标收集和发布,增强了 JBoss EAP 中的监控功能。但是,org.jboss.extension.micrometer 子系统可供 JBoss EAP 分发中的所有独立配置使用,但必须手动添加。

先决条件

  • 已安装带有 JBoss EAP XP 5.0 的 JBoss EAP 8.0。
  • 您可以访问 JBoss EAP 管理 CLI 和进行配置更改的权限。

流程

  1. 打开一个终端。
  2. 运行以下命令来连接到服务器:

    ./jboss-cli.sh --connect
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,检查 Micrometer 扩展是否已添加到配置中:

    [standalone@localhost:9990 /] /extension=org.wildfly.extension.micrometer:read-resource
    Copy to Clipboard Toggle word wrap
  4. 如果 Micrometer 扩展不可用,请运行以下命令来添加它:

    [standalone@localhost:9990 /] /extension=org.wildfly.extension.micrometer:add
    Copy to Clipboard Toggle word wrap
  5. 使用所需的配置添加 Micrometer 子系统。例如,运行以下命令来指定指标收集器的端点 URL:

    [standalone@localhost:9990 /] /subsystem=micrometer:add(endpoint="http://localhost:4318/v1/metrics")
    Copy to Clipboard Toggle word wrap
  6. 重新载入服务器以应用更改:

    [standalone@localhost:9990 /] reload
    Copy to Clipboard Toggle word wrap
注意

当收集器没有运行或者其收集器端点不可用时,会触发类似如下的警告信息:

11:28:16,581 WARNING [io.micrometer.registry.otlp.OtlpMeterRegistry] (MSC service thread 1-5) Failed to publish metrics to OTLP receiver: java.net.ConnectException: Connection refused
Copy to Clipboard Toggle word wrap

通过遵循这些步骤,您可以使用管理 CLI 将 Micrometer 子系统添加到 JBoss EAP 服务器中,为应用启用增强的监控功能。

第 7 章 为 JBoss EAP 开发 Micrometer 应用程序

7.1. 在 JBoss EAP 中集成 Micrometer 指标

通过使用 Micrometer,您可以在 JBoss EAP 中监控和收集应用程序指标。Micrometer 支持提供了应用程序指标的暴露。导出过程基于 PUSH,确保指标发送到 OpenTelemetry Collector。

先决条件

注意

本节中的示例包括如何使用 configure-micrometer.cli 文件,它基于 Micrometer Quickstart

流程

  1. 打开终端。
  2. 使用以下脚本将 JBoss EAP 启动为独立服务器:

    $ <EAP_HOME>/bin/standalone.sh -c standalone-microprofile.xml
    Copy to Clipboard Toggle word wrap
    注意

    对于 Windows 服务器,请使用 &lt ;EAP_HOME&gt; \bin\standalone.bat 脚本。

  3. 打开一个新的终端。
  4. 导航到应用程序根目录。
  5. 运行以下命令来配置服务器:

    $ <EAP_HOME>/bin/jboss-cli.sh --connect --file=configure-micrometer.cli
    Copy to Clipboard Toggle word wrap
    注意

    对于 Windows 服务器,请使用 &lt ;EAP_HOME&gt; \bin\jboss-cli.bat 脚本。

    <EAP_HOME > 替换为服务器的路径。

    预期输出:

    The batch executed successfully
    process-state: reload-required
    Copy to Clipboard Toggle word wrap

  6. 使用以下管理命令重新载入服务器:

    $ <EAP_HOME>/bin/jboss-cli.sh --connect --commands=reload
    Copy to Clipboard Toggle word wrap
  7. 使用以下内容创建名为 docker-compose.yaml 的配置文件:

    version: "3"
    
    services:
      otel-collector:
        image: otel/opentelemetry-collector
        command: [--config=/etc/otel-collector-config.yaml]
        volumes:
          - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml:Z
        ports:
          - 1888:1888 # pprof extension
          - 8888:8888 # Prometheus metrics exposed by the collector
          - 8889:8889 # Prometheus exporter metrics
          - 13133:13133 # health_check extension
          - 4317:4317 # OTLP gRPC receiver
          - 4318:4318 # OTLP http receiver
          - 55679:55679 # zpages extension
          - 1234:1234 # /metrics endpoint
    Copy to Clipboard Toggle word wrap
  8. 使用以下内容创建名为 otel-collector-config.yaml 的配置文件:

    extensions:
      health_check:
      pprof:
        endpoint: 0.0.0.0:1777
      zpages:
        endpoint: 0.0.0.0:55679
    
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    
    processors:
      batch:
    
    exporters:
      prometheus:
        endpoint: "0.0.0.0:1234"
    
    service:
      pipelines:
        metrics:
          receivers: [otlp]
          processors: [batch]
          exporters: [prometheus]
    
      extensions: [health_check, pprof, zpages]
    Copy to Clipboard Toggle word wrap
  9. 运行以下命令启动收集器服务器实例:

    $ docker-compose up
    Copy to Clipboard Toggle word wrap
    注意

    您还可以使用 Podman 而不是 Docker。如果您选择 Podman,则使用 $ podman-compose up 命令而不是 $ docker-compose。如果您的环境不支持 Docker 或 Podman,请参阅 Otel Collector 文档了解 安装和运行 OpenTelemetry Collector 的指南。

  10. RootResource 类中,了解 MeterRegistry 如何注入您的类,以确保在注册量表前正确设置。

    @Path("/")
    @ApplicationScoped
    public class RootResource {
        // ...
        @Inject
        private MeterRegistry registry;
    
        private Counter performCheckCounter;
        private Counter originalCounter;
        private Counter duplicatedCounter;
    
        @PostConstruct
        private void createMeters() {
            Gauge.builder("prime.highestSoFar", () -> highestPrimeNumberSoFar)
                    .description("Highest prime number so far.")
                    .register(registry);
            performCheckCounter = Counter
                    .builder("prime.performedChecks")
                    .description("How many prime checks have been performed.")
                    .register(registry);
            originalCounter = Counter
                    .builder("prime.duplicatedCounter")
                    .tags(List.of(Tag.of("type", "original")))
                    .register(registry);
            duplicatedCounter = Counter
                    .builder("prime.duplicatedCounter")
                    .tags(List.of(Tag.of("type", "copy")))
                    .register(registry);
        }
        // ...
    }
    Copy to Clipboard Toggle word wrap
  11. 检查 checkIfPrime () 方法正文,以了解如何在应用程序逻辑中使用注册的量表。例如:

    @GET
    @Path("/prime/{number}")
    public String checkIfPrime(@PathParam("number") long number) throws Exception {
        performCheckCounter.increment();
    
        Timer timer = registry.timer("prime.timer");
    
        return timer.recordCallable(() -> {
    
            if (number < 1) {
                return "Only natural numbers can be prime numbers.";
            }
    
            if (number == 1) {
                return "1 is not prime.";
            }
    
            if (number == 2) {
                return "2 is prime.";
            }
    
            if (number % 2 == 0) {
                return number + " is not prime, it is divisible by 2.";
            }
    
            for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    //
                }
                if (number % i == 0) {
                    return number + " is not prime, is divisible by " + i + ".";
                }
            }
    
            if (number > highestPrimeNumberSoFar) {
                highestPrimeNumberSoFar = number;
            }
    
            return number + " is prime.";
        });
    }
    Copy to Clipboard Toggle word wrap
  12. 导航到应用程序根目录。

    语法

    $ cd <path_to_application_root>/<application_root>
    Copy to Clipboard Toggle word wrap

    例如,引用 Micrometer Quickstart:

    $ cd ~/quickstarts/micrometer
    Copy to Clipboard Toggle word wrap

  13. 使用以下命令编译并部署应用程序:

    $ mvn clean package wildfly:deploy
    Copy to Clipboard Toggle word wrap

这会将 micrometer/target/micrometer.war 部署到正在运行的服务器。

验证

  1. 使用 Web 浏览器访问 应用,也可以运行以下命令:

    $ curl http://localhost:8080/micrometer/prime/13
    Copy to Clipboard Toggle word wrap

    预期输出:

    13 is prime.
    Copy to Clipboard Toggle word wrap

您可以在 OpenShift 镜像的 JBoss EAP XP 上构建并运行微服务应用程序。

注意

JBoss EAP XP 仅支持 OpenShift 4 及更新的版本。

使用以下工作流,使用 source-to-image (S2I)进程为 JBoss EAP XP 构建并运行微服务应用。

注意

默认的 cloud-default-mp-config 层提供独立配置文件,该文件基于 standalone-microprofile-ha.xml 文件。有关 JBoss EAP XP 中包含的服务器配置文件的更多信息,请参阅 单机服务器配置文件 部分。

此工作流使用 microprofile-config quickstart 作为示例。Quickstart 提供了一个小型特定工作示例,可用作您自己的项目的参考。如需更多信息,请参阅 JBoss EAP XP 5.0.0 附带的 microprofile-config Quickstart。

其他资源

8.1. 为应用程序部署准备 OpenShift

为应用部署准备 OpenShift。

先决条件

已安装可正常运行的 OpenShift 实例。如需更多信息,请参阅红帽客户门户网站中的 安装和配置 OpenShift Container Platform 集群 一书。

流程

  1. 使用 oc login 命令登录到您的 OpenShift 实例。
  2. 在 OpenShift 中创建一个新项目。

    项目允许一组用户独立于其他组组织和管理内容。您可以使用以下命令在 OpenShift 中创建项目。

    $ oc new-project PROJECT_NAME
    Copy to Clipboard Toggle word wrap

    例如,对于 microprofile-config Quickstart,使用以下命令创建一个名为 eap-demo 的新项目:

    $ oc new-project eap-demo
    Copy to Clipboard Toggle word wrap

8.2. 使用 S2I 构建和部署 JBoss EAP XP 应用镜像

按照 Source-to-Image (S2I)工作流,为 JBoss EAP XP 应用构建可重复生成的容器镜像。这些生成的容器镜像包括应用部署和可直接运行 JBoss EAP XP 服务器。

S2I 工作流从 Git 存储库获取源代码,并将其注入到基于您要使用的语言和框架的容器中。在 S2I 工作流完成后,将编译 src 代码,应用将被打包并部署到 JBoss EAP XP 服务器。

先决条件

  • 您有一个有效的红帽客户帐户。
  • 您有一个 Registry Service Account。按照红帽客户门户网站中的说明,使用 registry 服务帐户 创建身份验证令牌
  • 您已下载了 OpenShift secret YAML 文件,您可以使用它来从红帽生态系统目录中拉取镜像。如需更多信息,请参阅 OpenShift Secret
  • 您可以使用 oc login 命令登录 OpenShift。
  • 您已安装 Helm。如需更多信息,请参阅安装 Helm
  • 您已在管理 CLI 中输入此命令安装了 JBoss EAP Helm chart 的存储库:

    $ helm repo add jboss-eap https://jbossas.github.io/eap-charts/
    Copy to Clipboard Toggle word wrap

流程

  1. 使用以下 YAML 内容,创建名为 helm.yaml 的文件:

    build:
      uri: https://github.com/jboss-developer/jboss-eap-quickstarts.git
      ref: XP_5.0.0.GA
      contextDir: microprofile-config
      mode: s2i
    deploy:
      replicas: 1
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令,在 Openshift 上部署 JBoss EAP XP 应用程序:

    $ helm install microprofile-config -f helm.yaml jboss-eap/eap-xp5
    Copy to Clipboard Toggle word wrap
注意

此流程与在 OpenShift 中使用 source-to-image 构建应用程序镜像 非常相似。有关该流程的更多信息,请参阅在 OpenShift Container Platform 中使用 JBoss EAP

验证

  • 使用 curl 访问应用程序。

    $ curl https://$(oc get route microprofile-config --template='{{ .spec.host }}')/config/value
    Copy to Clipboard Toggle word wrap

    您将获得 MyPropertyFileConfigValue 输出,确认该应用已经部署。

根据您的应用,您可能需要在构建和部署 OpenShift 应用后完成一些任务。

部署后任务示例包括:

  • 公开服务,以便应用可从 OpenShift 外部查看。
  • 将应用程序扩展到特定数量的副本。

流程

  1. 使用以下命令获取应用程序的服务名称。

    $ oc get service
    Copy to Clipboard Toggle word wrap
  2. 可选 :将主服务作为路由公开,以便您可以从 OpenShift 外部访问应用。例如,对于 microprofile-config Quickstart,请使用以下命令公开所需的服务和端口。

    $ oc expose service/microprofile-config --port=8080
    Copy to Clipboard Toggle word wrap
  3. 获取路由的 URL。

    $ oc get route
    Copy to Clipboard Toggle word wrap
  4. 使用 URL 在 Web 浏览器中访问应用程序。URL 是上一命令输出中的 HOST/PORT 字段的值。

    注意

    对于 JBoss EAP XP 5.0.0 GA 发布,Microprofile 配置快速启动不会回复对应用程序的根上下文的 HTTPS GET 请求。此功能增强仅适用于 {JBossXPShortName101} GA 发行版。

    例如,若要与 Microprofile Config 应用交互,您的浏览器中 URL 可能是 http://HOST_PORT_Value/config/value

    如果您的应用程序没有使用 JBoss EAP root 上下文,请将应用的上下文附加到 URL。例如,对于 microprofile-config Quickstart,URL 可以是 http://HOST_PORT_VALUE/microprofile-config/

  5. 另外,您可以通过运行以下命令来扩展应用程序实例。此命令将副本数增加到 3。

    $ oc scale deploymentconfig DEPLOYMENTCONFIG_NAME --replicas=3
    Copy to Clipboard Toggle word wrap

    例如,对于 microprofile-config Quickstart,请使用以下命令来扩展应用:

    $ oc scale deployment/microprofile-config --replicas=3
    Copy to Clipboard Toggle word wrap

第 9 章 功能修剪

在构建可引导 JAR 时,您可以决定要包含哪些 JBoss EAP 功能和子系统:

注意

只有 OpenShift 或构建可引导 JAR 时,才支持修剪功能。

其他资源

9.1. 可用的 JBoss EAP 层

红帽提供了多个层,可在 OpenShift 或可引导 JAR 中自定义 JBoss EAP 服务器的调配。

三个层是提供核心功能的基本层。其他层是 decorator 层,其增强了基本层的功能。

大多数 decorator 层可用于在 JBoss EAP 中为 OpenShift 构建 S2I 镜像,或构建可引导 JAR。几个层不支持 S2I 镜像;层的描述中指出这个限制。

注意

仅支持列出的层。不支持此处列出的层。

9.1.1. 基本层

每个基础层包括典型的服务器用户用例的核心功能。

datasources-web-server

此层包含一个 servlet 容器,以及配置数据源的功能。

此层不包括 MicroProfile 功能。

此层支持以下 Jakarta EE 规格:

  • Jakarta JSON Processing 1.1
  • Jakarta JSON Binding 1.0
  • Jakarta Servlet 4.0
  • Jakarta Expression Language 3.0
  • Jakarta Server Pages 2.3
  • Jakarta Standard Tag Library 1.2
  • jakarta Concurrency 1.1
  • Jakarta Annotations 1.3
  • Jakarta XML Binding 2.3
  • Jakarta Debugging Support for Other Languages 1.0
  • Jakarta Transactions 1.3
  • Jakarta Connectors 1.7
jaxrs-server

此层通过以下 JBoss EAP 子系统增强了 datasources-web-server 层:

  • jaxrs
  • weld
  • jpa

此层还在容器中本地添加了基于 Infinispan 的第二级实体缓存。

以下 MicroProfile 功能包含在此层中:

  • MicroProfile REST 客户端

除了 datasources-web-server 层支持的那些层,还需要以下 Jakarta EE 规格:

  • jakarta 上下文和依赖注入 2.0
  • Jakarta Bean Validation 2.0
  • Jakarta Interceptors 1.2
  • jakarta RESTful Web Services 2.1
  • Jakarta Persistence 2.2
cloud-server

此层通过以下 JBoss EAP 子系统增强了 jaxrs-server 层:

  • resource-adapters
  • messaging-activemq (远程代理消息传递,非嵌入式消息传递)

此层还在 jaxrs-server 层中添加以下可观察性功能:

  • MicroProfile Health
  • MicroProfile Config

除了 jaxrs-server 层支持的外,该层还支持以下 Jakarta EE 规格:

  • jakarta Security 1.0
cloud-default-mp-config

此层根据 standalone-microprofile-ha.xml 文件,使用独立配置来调配服务器。cloud-default-mp-layerorg.jboss.eap.xp:eap-xp-cloud-galleon-pack 提供,支持 JBoss EAP XP S2I 构建,但不适用于 Bootable JAR。有关 JBoss EAP XP 中包含的服务器配置文件的更多信息,请参阅 单机服务器配置文件 部分。

此工作流使用 microprofile-config quickstart 作为示例。Quickstart 提供了一个小型特定工作示例,可用作您自己的项目的参考。如需更多信息,请参阅 JBoss EAP XP 5.0.0 附带的 microprofile-config Quickstart。

ee-core-profile-server

ee-core-profile-server 层置备带有 Jakarta EE 10 核心配置文件的服务器。Core Profile 为提供核心 JBoss EAP 服务器功能和 Jakarta EE API 的用户提供了一个小型的轻量级配置文件。ee-core-profile-server 层最适合更小的运行时,如云原生应用程序和微服务。

9.1.2. decorator 层

Decorator 层不会独立使用。您可以使用基本层配置一个或多个 decorator 层,以提供额外的功能。

ejb-lite

此 decorator 层向置备的服务器添加最小的 Jakarta Enterprise Beans 实施。这个层不包括以下支持:

  • IIOP 集成
  • MDB 实例池
  • 远程连接器资源

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

Jakarta Enterprise Beans

此 decorator 层扩展 ejb-lite 层。除了 ejb-lite 层中包含的基本功能外,此层还对置备的服务器添加以下支持:

  • MDB 实例池
  • 远程连接器资源

如果要使用消息驱动的 Bean (MDB)或 Jakarta Enterprise Beans 远程功能,则使用这个层。如果不需要这些功能,请使用 ejb-lite 层。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

ejb-local-cache

此 decorator 层将 Jakarta Enterprise Beans 的本地缓存支持添加到置备的服务器。

依赖项 :只有当您包含 ejb-lite 层或 ejb 层时,才能包含此层。

注意

此层与 ejb-dist-cache 层不兼容。如果包含 ejb-dist-cache 层,则无法包含 ejb-local-cache 层。如果您同时包含两个层,则生成的构建可能会包含意外的 Jakarta Enterprise Beans 配置。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

ejb-dist-cache

此 decorator 层将 Jakarta Enterprise Beans 的分布式缓存支持添加到置备的服务器。

依赖项 :只有当您包含 ejb-lite 层或 ejb 层时,才能包含此层。

注意

此层与 ejb-local-cache 层不兼容。如果包含 ejb-dist-cache 层,则无法包含 ejb-local-cache 层。如果您同时包含两个层,则生成的构建可能会导致意外配置。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

jdr

此 decorator 层添加 JBoss 诊断报告(jdr)子系统,以便在从红帽请求支持时收集诊断数据。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

jakarta Persistence

此 decorator 层为单节点服务器添加持久性功能。请注意,只有在服务器能够组成集群时,分布式缓存才可以正常工作。

该层将 Hibernate 库添加到置备的服务器,并具有以下支持:

  • jpa 子系统的配置
  • infinispan 子系统的配置
  • 本地 Hibernate 缓存容器
注意

此层与 jpa-distributed 层不兼容。如果包含 jpa 层,则无法包含 jpa-distributed 层。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

jpa-distributed

这个 decorator 层为集群中运行的服务器添加持久性功能。该层将 Hibernate 库添加到置备的服务器,并具有以下支持:

  • jpa 子系统的配置
  • infinispan 子系统的配置
  • 本地 Hibernate 缓存容器
  • Invalidation 和 replication Hibernate 缓存容器
  • 配置 jgroups 子系统
注意

此层与 jpa 层不兼容。如果包含 jpa 层,则无法包含 jpa-distributed 层。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

jakarta Server Faces

此 decorator 层将 jsf 子系统添加到调配的服务器。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

microprofile-platform

此 decorator 层向置备的服务器添加以下 MicroProfile 功能:

  • MicroProfile Config
  • MicroProfile Fault Tolerance
  • MicroProfile Health
  • MicroProfile JWT
  • MicroProfile OpenAPI
注意

此层包括 可观察 层中包含的 MicroProfile 功能。如果包含这个层,则不需要包含 可观察 层。

Observability(可观察性)

这个 decorator 层在置备的服务器中添加了以下可观察性功能:

  • MicroProfile Health
  • MicroProfile Config
注意

此层内置于 cloud-server 层。您不需要将此层添加到 cloud-server 层。

remote-activemq

此 decorator 层添加了与远程 ActiveMQ 代理通信到调配的服务器的功能,集成消息传递支持。

池的连接工厂配置将 guest 指定为 用户和密码 属性的值。您可以使用 CLI 脚本在运行时更改这些值。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

sso

这种 decorator 层将 Red Hat Single Sign-On 集成到置备的服务器。

只有在使用 S2I 调配服务器时,才应使用此层。

web-console

这个 decorator 层将管理控制台添加到置备的服务器。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

web-clustering

此 decorator 层通过为适合集群环境的数据会话处理配置基于本地 Infinispan 的容器 Web 缓存来添加对可分布式 Web 应用的支持。

web-passivation

此 decorator 层通过为适合单一节点环境的数据会话配置本地基于 Infinispan 的容器 Web 缓存来添加对可分布式 Web 应用程序的支持。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

webservices

此层为调配的服务器添加 Web 服务功能,支持 Jakarta Web 服务部署。

只有在构建可引导 JAR 时,才支持此层。使用 S2I 时不支持这个层。

其他资源

如果要在您使用 JBoss 工具开发的应用程序中纳入 MicroProfile 功能,您必须在 JBoss 工具中启用对 JBoss EAP 的 MicroProfile 支持。

JBoss EAP 扩展包提供对 MicroProfile 的支持。

JBoss EAP 7.2 及更早版本不支持 JBoss EAP expansion pack。

JBoss EAP 扩展包的每个版本都支持 JBoss EAP 的特定补丁。详情请查看 JBoss EAP 扩展软件包支持和生命周期政策页。

重要

用于 Openshift 的 JBoss EAP XP Quickstarts 仅作为技术预览提供。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

10.1. 配置 JBoss 工具以使用 MicroProfile 功能

要在 JBoss EAP 上启用 MicroProfile 支持,请为 JBoss EAP XP 注册一个新的运行时服务器,然后创建新的 JBoss EAP 8.0 服务器。

为服务器指定适当的名称,可帮助您识别它支持 MicroProfile 功能。

此服务器使用新创建的 JBoss EAP XP 运行时,该运行时指向之前安装的运行时,并使用 standalone-microprofile.xml 配置文件。

注意

如果您在 JBoss 工具中将 Target 运行时 设置为 8.0 或更新的运行时版本,则您的项目与 Jakarta EE 8 规格兼容。

流程

  1. 新建服务器 对话框中设置新的服务器。

    1. Select server type 列表中,选择 Red Hat JBoss Enterprise Application Platform 8.0
    2. Server 的主机名 字段中,输入 localhost
    3. Server name 字段中,输入 JBoss EAP 8.0 XP
    4. 点击 Next
  2. 配置新的服务器。

    1. Home directory 字段中,如果您不想使用默认设置,请指定一个新目录;例如: home/myname/dev/microprofile/runtimes/jboss-eap-7.4
    2. 确保 执行环境 设置为 JavaSE-1.8
    3. 可选:更改 Server 基础目录 和配置文件字段中的值
    4. Finish

结果

现在,您已准备好开始使用 MicroProfile 功能开发应用程序,或开始使用 JBoss EAP 的 MicroProfile 快速入门。

10.2. 使用 MicroProfile 快速入门进行 JBoss 工具

启用 MicroProfile 快速入门可简化在已安装的服务器上运行和测试的简单示例。

这些示例演示了以下 MicroProfile 功能。

  • MicroProfile Config
  • MicroProfile Fault Tolerance
  • MicroProfile Health
  • MicroProfile JWT
  • MicroProfile OpenAPI
  • MicroProfile REST 客户端

流程

  1. 从 Quickstart Parent Artifact 导入 pom.xml 文件。
  2. 如果您使用需要环境变量的快速入门,请在服务器 Overview 对话框中在启动配置上配置这些变量。

    例如,opentelemetry-tracing quickstart 使用以下环境变量:

    • OTEL_COLLECTOR_HOST

其他资源

关于 Microprofile

关于 JBoss Enterprise Application Platform expansion pack

Red Hat JBoss Enterprise Application Platform expansion pack 支持和生命周期政策

第 11 章 可引导 JAR

您可以使用 JBoss EAP JAR Maven 插件构建和打包微服务应用,作为可引导 JAR。然后,您可以在 JBoss EAP 裸机平台或 JBoss EAP OpenShift 平台上运行应用程序。

11.1. 关于可引导 JAR

您可以使用 JBoss EAP JAR Maven 插件构建和打包微服务应用,作为可引导 JAR。

可引导 JAR 包含服务器、打包的应用程序以及启动服务器所需的运行时。

JBoss EAP JAR Maven 插件使用 Galleon 修剪功能来减少服务器的大小和内存占用量。因此,您可以根据要求配置服务器,仅包含提供您需要的功能的 Galleon 层。

JBoss EAP JAR Maven 插件支持执行 JBoss EAP CLI 脚本文件来自定义服务器配置。CLI 脚本包含用于配置服务器的 CLI 命令列表。

可引导 JAR 类似于标准 JBoss EAP 服务器:

  • 它支持 JBoss EAP 通用管理 CLI 命令。
  • 它可以通过 JBoss EAP 管理控制台进行管理。

在可引导 JAR 中打包服务器时存在以下限制:

  • 不支持需要服务器重启的 CLI 管理操作。
  • 服务器不能以 admin-only 模式重启,这是启动与服务器管理相关的服务的模式。
  • 如果您关闭服务器,则应用到服务器的更新将会丢失。

另外,您还可以置备 hollow bootable JAR。此 JAR 仅包含服务器,以便您可以重复使用服务器来运行不同的应用。

11.2. JBoss EAP JAR Maven 插件

您可以使用 JBoss EAP JAR Maven 插件将应用程序构建为可引导 JAR。

检查您具有最新的 Maven 插件,如 9. minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本为 微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009

在 Maven 项目中,src 目录包含构建应用程序所需的所有源文件。在 JBoss EAP JAR Maven 插件构建可引导 JAR 后,生成的 JAR 位于 target/<application>-bootable.jar 中。

JBoss EAP JAR Maven 插件还提供以下功能:

  • 允许您使用 JBoss EAP 频道调配 JBoss EAP XP 服务器。
  • 将 CLI 脚本命令应用到服务器。
  • 使用 org.jboss.eap.xp:wildfly-galleon-pack Galleon 功能软件包及其一些层来自定义服务器配置文件。
  • 支持将额外文件添加到打包的可引导 JAR 中,如密钥存储文件。
  • 包含创建 hollow bootable JAR 的功能,即不包含应用的可引导 JAR 的功能。

使用 JBoss EAP JAR Maven 插件创建可引导 JAR 后,您可以通过发出以下命令来启动应用:将 target/myapp-bootable.jar 替换为可引导 JAR 的路径。例如:

$ java -jar target/myapp-bootable.jar
Copy to Clipboard Toggle word wrap
注意

要获得受支持的 bootable JAR 启动命令列表,请在启动命令的末尾附加 - help。例如,java -jar target/myapp-bootable.jar --help

11.3. 可引导 JAR 参数

查看下表中的参数,以了解用于可引导 JAR 的支持参数。

Expand
表 11.1. 支持的可引导 JAR 可执行文件参数
参数描述

--help

显示指定命令的帮助信息并退出。

--cli-script=<path>

指定启动可引导 JAR 时执行的 JBoss CLI 脚本的路径。如果指定的路径相对,则路径会根据用于启动可引导 JAR 的 Java 虚拟机实例的工作目录解析。

--deployment=<path>

特定于 hollow bootable JAR 的参数。指定包含您要部署到服务器上的应用程序的 WAR、JAR、EAR 文件或展开目录的路径。

--display-galleon-config

输出生成的 Galleon 配置文件的内容。

--install-dir=<path>

默认情况下,JVM 设置用于在启动可引导 JAR 后创建 TEMP 目录。您可以使用 --install-dir 参数指定安装服务器的目录。

-secmgr

运行安装有安全管理器的服务器。

-b<interface>=<value>

将系统属性 jboss.bind.address.<interface> 设置为给定值。例如,bmanagement=IP_ADDRESS

-b=<value>

设置系统属性 jboss.bind.address,用于为公共接口配置绑定地址。如果没有指定值,则默认为 127.0.0.1。

-D<name>[=<value>]

指定服务器运行时设置的系统属性。可引导 JAR JVM 不会设置这些系统属性。

--properties=<url>

从指定的 URL 加载系统属性。

-S<name>[=value]

设置安全属性。

-u=<value>

设置系统属性 jboss.default.multicast.address,用于在配置文件中的 socket-binding 元素中配置多播地址。如果没有指定值,则默认为 230.0.0.4。

--version

显示应用服务器版本并退出。

11.4. 为可引导 JAR 服务器指定 Galleon 层

您可以指定 Galleon 层来为服务器构建自定义配置。另外,您可以指定您要从服务器中排除的 Galleon 层。

从 JBoss EAP XP 5.0 开始,需要使用 JBoss EAP 8.0 和 JBoss EAP XP 5.0 频道配置 JBoss EAP JAR Maven 插件来检索服务器工件。有关 JBoss EAP 频道的更多信息,请参阅管理 JBoss EAP 安装频道

要指定 JBoss EAP 和 JBoss EAP XP 频道以置备最新的 JBoss EAP XP 5.0 服务器,请按照以下示例操作:

注意

使用 & lt;feature-pack-location& gt; 元素来指定功能软件包位置。在 Maven 插件配置文件中,以下示例在 < feature-pack-location> 元素中指定 org.jboss.eap.xp:wildfly-galleon-pack

<configuration>
	<channels>
		<channel>
			<manifest>
				<groupId>org.jboss.eap.channels</groupId>
				<artifactId>eap-8.0</artifactId>
			</manifest>
		</channel>
		<channel>
			<manifest>
				<groupId>org.jboss.eap.channels</groupId>
				<artifactId>eap-xp-5.0</artifactId>
			</manifest>
		</channel>
	</channels>
	<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
</configuration>
Copy to Clipboard Toggle word wrap

如果您需要引用多个功能包,请在 < feature-packs> 元素中 列出它们。以下示例显示了在 < feature-packs > 元素中添加 JBoss EAP datasources 功能 pack:

<configuration>
	<feature-packs>
		<feature-pack>
			<location>org.jboss.eap.xp:wildfly-galleon-pack</location>
		</feature-pack>
		<feature-pack>
			<location>org.jboss.eap:eap-datasources-galleon-pack</location>
		</feature-pack>
	</feature-packs>
</configuration>
Copy to Clipboard Toggle word wrap

您可以组合来自多个功能软件包的 Galleon 层,将可引导 JAR 服务器配置为只包含提供您需要的功能的 Galleon 层。

注意

在裸机平台上,如果您在配置文件中没有指定 Galleon 层,则调配的服务器包含一个与默认 standalone-microprofile.xml 配置相同的配置。

在 OpenShift 平台上,在插件配置中添加了 & lt;cloud /> 配置元素后,您选择不要在配置文件中指定 Galleon 层,置备的服务器包含针对云环境调整的配置,类似于默认的 standalone-microprofile-ha.xml

先决条件

  • 已安装 Maven。
  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009
注意

流程中显示的示例指定以下属性:

  • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。

您必须在项目中设置这些属性。例如:

<properties>
    <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
</properties>
Copy to Clipboard Toggle word wrap

流程

  1. 确定支持的 JBoss EAP Galleon 层,提供运行应用程序所需的功能。
  2. 在 Maven 项目 pom.xml 文件的 &lt ;plugin& gt; 元素中引用 JBoss EAP feature pack 位置。以下示例显示了包含单一功能包的单个功能包,其中包括 jaxrs-server 基础层和 jpa-distributed 层。jaxrs-server 基础层为服务器提供额外的支持。

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
    			<layers>
    				<layer>jaxrs-server</layer>
    				<layer>jpa-distributed</layer>
    			</layers>
    			<excluded-layers>
    				<layer>jpa</layer>
    			</excluded-layers>
                     ...
    		</configuration>
    	</plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap

    本例还显示来自项目的 jpa 层的排除。

    注意

    如果您在项目中包含 jpa-distributed 层,则必须从 jaxrs-server 层中排除 jpa 层。jpa 层配置本地 infinispan hibernate 缓存,而 jpa-distributed 层配置远程 infinispan hibernate 缓存。

11.5. 在 JBoss EAP 裸机平台上使用可引导 JAR

您可以将应用打包为 JBoss EAP 裸机平台上的可引导 JAR。

可引导 JAR 包含服务器、打包的应用程序以及启动服务器所需的运行时。

此流程演示了使用 JBoss EAP JAR Maven 插件将 MicroProfile Config 微服务应用打包为可引导 JAR。请参阅 MicroProfile 配置快速入门

您可以使用 CLI 脚本在可引导 JAR 打包期间配置服务器。

重要

在构建必须打包在可引导 JAR 中的 web 应用程序时,您必须在 pom.xml 文件的 & lt;packaging > 项中指定 war。例如:

<packaging>war</packaging>
Copy to Clipboard Toggle word wrap

此值需要将构建应用打包为 WAR 文件,而不是作为默认的 JAR 文件。

在仅构建 hollow bootable JAR 的 Maven 项目中,将打包值设置为 pom。例如:

<packaging>pom</packaging>
Copy to Clipboard Toggle word wrap

当您为 Maven 项目构建 hollow bootable JAR 时,您不限于使用 pom 打包。您可以通过在 < hollow-jar > 项中为任何类型的打包指定 true 来创建 true,如 war。请参阅在 JBoss EAP 裸机平台上创建休眠 JAR

先决条件

  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009
  • 您已创建了 Maven 项目,并添加用于创建 MicroProfile 应用的依赖项。请参阅 MicroProfile 配置开发
注意

流程中显示的示例指定以下属性:

  • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。

您必须在项目中设置这些属性。例如:

<properties>
    <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
</properties>
Copy to Clipboard Toggle word wrap

流程

  1. pom.xml 文件的 <build > 元素中添加以下内容。例如:

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
    			<layers>
    				<layer>jaxrs-server</layer>
    				<layer>microprofile-platform</layer>
    			</layers>
    		</configuration>
    		<executions>
    			<execution>
    				<goals>
    					<goal>package</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap
    注意

    如果您没有在 pom.xml 文件中指定 Galleon 层,则可引导 JAR 服务器包含一个与 standalone-microprofile.xml 配置相同的配置。

  2. 将应用程序打包为可引导 JAR:

    $ mvn package
    Copy to Clipboard Toggle word wrap
  3. 启动应用程序:

    $ NAME="foo" java -jar target/microprofile-config-bootable.jar
    Copy to Clipboard Toggle word wrap
    注意

    该示例使用 NAME 作为环境变量,但您可以选择使用 jim,这是默认值。

    注意

    要查看支持的可引导 JAR 参数的列表,请将 --help 附加到 java -jar target/microprofile-config-bootable.jar 命令的末尾。

  4. 在 Web 浏览器中指定以下 URL 以访问 MicroProfile Config 应用:

    http://localhost:8080/config/json
    Copy to Clipboard Toggle word wrap
  5. 验证 : 在终端中运行以下命令来测试应用程序的行为:

    curl http://localhost:8080/config/json
    Copy to Clipboard Toggle word wrap

    以下是预期的输出:

    {"result":"Hello foo"}
    Copy to Clipboard Toggle word wrap

您可以在 JBoss EAP 裸机平台上将应用程序打包为 hollow bootable JAR。

hollow bootable JAR 仅包含 JBoss EAP 服务器。hollow bootable JAR 由 JBoss EAP JAR Maven 插件打包。该应用在服务器运行时提供。如果您需要为不同的应用重新使用服务器配置,则 hollow bootable JAR 非常有用。

先决条件

  • 您已为 MicroProfile 配置开发创建了 Maven 项目。例如:请参阅 MicroProfile 配置快速入门
  • 您已完成了在 JBoss EAP 裸机平台上使用可引导 JAR 中概述的 pom.xml 文件配置步骤。
  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009

流程

  1. 要构建 hollow bootable JAR,您必须在项目 pom.xml 文件中将 < hollow-jar > 插件配置元素设置为 true。例如:
<plugins>
	<plugin>
            ...
		<configuration>
			<!-- This example configuration does not show a complete plug-in configuration -->
                 ...
			<groupId>org.wildfly.plugins</groupId>
			<artifactId>wildfly-jar-maven-plugin</artifactId>
			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
			<hollow-jar>true</hollow-jar>
		</configuration>
	</plugin>
</plugins>
Copy to Clipboard Toggle word wrap
注意

通过在 < hollow-jar& gt; 元素中指定 true,JBoss EAP JAR Maven 插件不会将应用包含在 JAR 中。

  1. 构建 hollow bootable JAR:

    $ mvn clean package
    Copy to Clipboard Toggle word wrap
  2. 运行 hollow bootable JAR:

    $ java -jar target/microprofile-config-bootable.jar --deployment=target/microprofile-config.war
    Copy to Clipboard Toggle word wrap
    重要

    要指定要在服务器上部署的 WAR 文件的路径,请使用以下参数,其中 < PATH_NAME& gt; 是部署的路径。

    --deployment=<PATH_NAME>
    Copy to Clipboard Toggle word wrap
  3. 访问应用程序:

    $ curl http://localhost:8080/microprofile-config/config/json
    Copy to Clipboard Toggle word wrap
    注意

    要将 Web 应用注册到根目录,请将应用命名为 ROOT.war

11.7. 构建时执行的 CLI 脚本

您可以创建 CLI 脚本,以在可引导 JAR 打包期间配置服务器。

CLI 脚本是一个文本文件,其中包含可用于应用其他服务器配置的 CLI 命令序列。例如,您可以创建一个脚本来添加新的日志记录器到 logging 子系统。

您还可以在 CLI 脚本中指定更复杂的操作。例如,您可以将安全管理操作分组到单个命令中,以便为管理 HTTP 端点启用 HTTP 身份验证。

注意

在将应用程序打包为可引导 JAR 之前,您必须在插件 配置的 <cli-session > 元素中定义 CLI 脚本。这样可确保服务器配置设置在打包可引导 JAR 后保留。

虽然您可以组合预定义的 Galleon 层来配置部署应用程序的服务器,但存在限制。例如,在打包可引导 JAR 时,您无法使用 Galleon 层启用 HTTPS undertow 侦听器。反之,您必须使用 CLI 脚本。

您必须在 pom.xml 文件的 &lt ;cli-session& gt; 元素中定义 CLI 脚本。下表显示了 CLI 会话属性的类型:

Expand
表 11.2. CLI 脚本属性
参数描述

script-files

脚本文件的路径列表。

properties-file

可选属性,用于指定属性文件的路径。此文件列出了脚本可以使用 ${my.prop} 语法来引用的 Java 属性。以下示例将 public inet-address 设置为 all.addresses 的值:/interface=public:write-attribute (name=inet-address,value=${all.addresses})

resolve-expressions

包含布尔值的可选属性。指明在向服务器发送操作请求前是否解析系统属性或表达式。默认值为 true

注意
  • CLI 脚本会按照 pom.xml 文件的 &lt ;cli-session > 元素定义的顺序启动。
  • JBoss EAP JAR Maven 插件为每个 CLI 会话启动嵌入式服务器。因此,您的 CLI 脚本不必启动或停止嵌入式服务器。

11.8. 在运行时执行 CLI 脚本

您可以在运行时对服务器配置应用更改;这为您提供了针对执行上下文调整服务器的灵活性。但是,对服务器应用更改的首选方法是在构建期间应用。

流程

  • 启动可引导 JAR 和 --cli-script 参数。

    例如:

    java -jar myapp-bootable.jar --cli-scipt=my-scli-scipt.cli
    Copy to Clipboard Toggle word wrap
注意
  • CLI 脚本必须是文本文件(UTF-8),如果存在,则文件扩展是无意义的,但建议 .cli 扩展。
  • 需要服务器重启的操作将终止您的可引导 JAR 实例。
  • 连接重新加载关闭 以及与嵌入式服务器相关的所有命令都不正常运行。
  • 不支持在 admin-mode 中无法执行的 CLI 命令,如 jdbc-driver-info
重要

如果您在不执行 CLI 脚本的情况下重新启动服务器,您的新服务器实例将不包含来自上一服务器实例的更改。

11.9. 在 JBoss EAP OpenShift 平台上使用可引导 JAR

11.9.1. 使用 oc 命令进行二进制构建

将应用打包为可引导 JAR 后,您可以在 JBoss EAP OpenShift 平台上运行应用。

重要

在 OpenShift 上,您无法将 EAP Operator 自动事务恢复功能与可引导 JAR 搭配使用。

先决条件

  • 您已为 MicroProfile 配置开发创建了 Maven 项目。例如:请参阅 MicroProfile 配置快速入门
  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009
注意

流程中显示的示例指定以下属性:

  • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。

您必须在项目中设置这些属性。例如:

<properties>
    <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
</properties>
Copy to Clipboard Toggle word wrap

流程

  1. pom.xml 文件的 <build > 元素中添加以下内容。例如:

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
    			<layers>
    				<layer>jaxrs-server</layer>
    				<layer>microprofile-platform</layer>
    			</layers>
    			<cloud/>
    		</configuration>
    		<executions>
    			<execution>
    				<goals>
    					<goal>package</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap
    注意

    您必须在插件配置的 < configuration> 元素中包含 <cloud /> 元素,因此 JBoss EAP Maven JAR 插件可以识别您选择的 OpenShift 平台。

  2. 打包应用程序:

    $ mvn package
    Copy to Clipboard Toggle word wrap
  3. 使用 oc login 命令登录到您的 OpenShift 实例。
  4. 在 OpenShift 中创建一个新项目。例如:

    $ oc new-project bootable-jar-project
    Copy to Clipboard Toggle word wrap
  5. 输入以下 oc 命令来创建应用程序镜像:

    $ mkdir target/openshift && cp target/microprofile-config-bootable.jar target/openshift  
    1
    
    
    $ oc import-image ubi8/openjdk-17 --from=registry.redhat.io/ubi8/openjdk-17 --confirm 
    2
    
    
    $ oc new-build --strategy source --binary --image-stream openjdk-17 --name microprofile-config-app 
    3
    
    
    $ oc start-build microprofile-config-app --from-dir target/openshift 
    4
    Copy to Clipboard Toggle word wrap
    1
    在目标目录中创建 openshift 子目录。打包的应用程序被复制到创建的子目录中。
    2
    将最新的 OpenJDK 17 镜像流标签和镜像信息导入到 OpenShift 项目中。
    3
    根据 microprofile-config-app 目录和 OpenJDK 17 镜像流创建构建配置。
    4
    使用 target/openshift 子目录作为二进制输入来构建应用程序。
    注意

    OpenShift 将一组 CLI 脚本命令应用到可引导 JAR 配置文件,将其调整为云环境。您可以通过在 Maven 项目 / target 目录中 打开 bootable-jar-build-artifacts/generated-cli-script.txt 文件来访问此脚本。

  6. 验证:

    运行以下命令,查看可用的 OpenShift pod 列表并检查 pod 构建状态:

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    验证构建的应用程序镜像:

    $ oc get is microprofile-config-app
    Copy to Clipboard Toggle word wrap

    输出显示了构建的应用镜像详细信息,如名称和镜像存储库、标签等。对于此流程中的示例,镜像流名称和标签输出显示 microprofile-config-app:latest

  7. 部署应用程序:

    $ oc new-app microprofile-config-app
    
    $ oc expose svc/microprofile-config-app
    Copy to Clipboard Toggle word wrap
    重要

    要为可引导 JAR 提供系统属性,您必须使用 JAVA_OPTS_APPEND 环境变量。以下示例演示了使用 JAVA_OPTS_APPEND 环境变量:

    $ oc new-app <_IMAGESTREAM_> -e JAVA_OPTS_APPEND="-Xlog:gc*:file=/tmp/gc.log:time -Dwildfly.statistics-enabled=true"
    Copy to Clipboard Toggle word wrap

    新建应用已创建并启动。应用程序配置作为新服务公开。

  8. 验证 :在终端中运行以下命令来测试应用程序的行为:

    $ curl http://$(oc get route microprofile-config-app --template='{{ .spec.host }}')/config/json
    Copy to Clipboard Toggle word wrap

    预期输出:

    {"result":"Hello jim"}
    Copy to Clipboard Toggle word wrap

11.10. 为 OpenShift 配置可引导 JAR

在使用可引导 JAR 之前,您可以配置 JVM 设置,以确保单机服务器在 JBoss EAP for OpenShift 上正确运行。

使用 JAVA_OPTS_APPEND 环境变量来配置 JVM 设置。使用 JAVA_ARGS 命令,为可引导 JAR 提供参数。

您可以使用环境变量为属性设置值。例如,您可以使用 JAVA_OPTS_APPEND 环境变量将 -Dwildfly.statistics-enabled 属性设置为 true

JAVA_OPTS_APPEND="-Xlog:gc*:file=/tmp/gc.log:time -Dwildfly.statistics-enabled=true"
Copy to Clipboard Toggle word wrap

现在为您的服务器启用统计。

注意

如果您需要为可引导 JAR 提供参数,请使用 JAVA_ARGS 环境变量。

用于 OpenShift 的 JBoss EAP 提供 JDK 17 镜像。要运行与可引导 JAR 关联的应用,您必须首先将最新的 OpenJDK 17 镜像流标签和镜像信息导入到 OpenShift 项目中。然后,您可以使用环境变量在导入的镜像中配置 JVM。

您可以应用相同的配置选项来配置用于 JBoss EAP for OpenShift S2I 镜像的 JVM,但有以下区别:

  • 可选: -Xlog 功能不可用,但您可以通过启用 -Xlog:gc 来设置垃圾回收日志记录。例如: JAVA_OPTS_APPEND="-Xlog:gc*:file=/tmp/gc.log:time"。
  • 要增加初始元空间大小,您可以设置 GC_METASPACE_SIZE 环境变量。为获得最佳元数据容量性能,请将值设为 96
  • 要更好地生成随机文件,请使用 JAVA_OPTS_APPEND 环境变量将 java.security.egd 属性设置为 -Djava.security.egd=file:/dev/urandom

这些配置提高了在导入的 OpenJDK 17 镜像上运行的 JVM 的内存设置和垃圾回收功能。

11.11. 在 OpenShift 上使用应用程序中的 ConfigMap

对于 OpenShift,您可以使用部署控制器(dc)将 configmap 挂载到用于运行应用的 pod 中。

ConfigMap 是一个 OpenShift 资源,用于将非机密数据存储在键值对中。

在指定 microprofile-platform Galleon 层来添加 microprofile-config-smallrye 子系统以及服务器配置文件的任何扩展后,您可以使用 CLI 脚本向服务器配置添加新的 ConfigSource。您可以将 CLI 脚本保存在可访问的目录中,如 /scripts 目录,位于 Maven 项目的根目录中。

MicroProfile 配置功能在 JBoss EAP 中使用 SmallRye Config 组件实施,它由 microprofile-config-smallrye 子系统提供。此子系统包含在 microprofile-platform Galleon 层中。

先决条件

  • 您已安装了 Maven。
  • 您已配置了 JBoss EAP Maven 存储库。
  • 您已将应用打包为可引导 JAR,您可以在 JBoss EAP OpenShift 平台上运行应用程序。有关在 OpenShift 平台上将应用程序作为可引导 JAR 构建应用程序的信息,请参阅在 JBoss EAP OpenShift 平台上使用可引导 JAR

流程

  1. 在项目的根目录下,创建名为 scripts 的目录。例如:

    $ mkdir scripts
    Copy to Clipboard Toggle word wrap
  2. 创建 cli.properties 文件,并将文件保存到 /scripts 目录中。在此文件中定义 config.pathconfig.ordinal 系统属性。例如:

    config.path=/etc/config
    config.ordinal=200
    Copy to Clipboard Toggle word wrap
  3. 创建一个 CLI 脚本,如 mp-config.cli,并将它保存在可引导 JAR 的可访问目录中,如 /scripts 目录。以下示例显示了 mp-config.cli 脚本的内容:

    # config map
    
    /subsystem=microprofile-config-smallrye/config-source=os-map:add(dir={path=${config.path}}, ordinal=${config.ordinal})
    Copy to Clipboard Toggle word wrap

    mp-config.cli CLI 脚本会创建一个新的 ConfigSource,该脚本将从属性文件检索到的 ordinal 和 path 值。

  4. 将脚本保存到 /scripts 目录中,该目录位于项目的根目录。
  5. 在现有插件 <configuration> 元素 中添加以下 配置提取:

    <cli-sessions>
        <cli-session>
            <properties-file>
                scripts/cli.properties
            </properties-file>
            <script-files>
                <script>scripts/mp-config.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>
    Copy to Clipboard Toggle word wrap
  6. 打包应用程序:

    $ mvn package
    Copy to Clipboard Toggle word wrap
  7. 使用 oc login 命令登录到您的 OpenShift 实例。
  8. 可选: 如果您之前还没有创建 target/openshift 子目录,则必须发出以下命令来创建 suddirectory:

    $ mkdir target/openshift
    Copy to Clipboard Toggle word wrap
  9. 将打包的应用复制到创建的子目录中。

    $ cp target/microprofile-config-bootable.jar target/openshift
    Copy to Clipboard Toggle word wrap
  10. 使用 target/openshift 子目录作为二进制输入来构建应用程序:

    $ oc start-build microprofile-config-app --from-dir target/openshift
    Copy to Clipboard Toggle word wrap
    注意

    OpenShift 将一组 CLI 脚本命令应用到可引导 JAR 配置文件,为云环境启用它。您可以通过在 Maven 项目 /target 目录中打开 bootable-jar-build-artifacts/generated-cli-script.txt 文件来访问此脚本。

  11. 创建 ConfigMap。例如:

    $ oc create configmap microprofile-config-map --from-literal=name="Name comes from Openshift ConfigMap"
    Copy to Clipboard Toggle word wrap
  12. 使用 dc 将 ConfigMap 挂载到应用。例如:

    $ oc set volume deployments/microprofile-config-app --add --name=config-volume \
    --mount-path=/etc/config \
    --type=configmap \
    --configmap-name=microprofile-config-map
    Copy to Clipboard Toggle word wrap

    执行 oc set volume 命令后,应用程序将使用新的配置设置重新部署。

  13. 测试输出:

    $ curl http://$(oc get route microprofile-config-app --template='{{ .spec.host }}')/config/json
    Copy to Clipboard Toggle word wrap

    以下是预期的输出:

    {"result":"Hello Name comes from Openshift ConfigMap"}
    Copy to Clipboard Toggle word wrap

11.12. 创建可引导 JAR Maven 项目

按照以下步骤创建示例 Maven 项目。您必须先创建一个 Maven 项目,然后才能执行以下步骤:

  • 为您的可引导 JAR 启用 JSON 日志记录
  • 为多个可引导 JAR 实例启用 Web 会话数据存储
  • 使用 CLI 脚本为可引导 JAR 启用 HTTP 身份验证
  • 使用红帽构建的 Keycloak 保护 JBoss EAP 可引导 JAR 应用程序

在项目 pom.xml 文件中,您可以配置 Maven 来检索构建可引导 JAR 所需的项目工件。

流程

  1. 设置 Maven 项目:

    $ mvn archetype:generate \
    -DgroupId=GROUP_ID \
    -DartifactId=ARTIFACT_ID \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false
    Copy to Clipboard Toggle word wrap

    其中 GROUP_ID 是项目的 groupIdARTIFACT_ID 是项目的 artifactId

  2. pom.xml 文件中,配置 Maven,以从远程存储库检索 JBoss EAP BOM 文件。

    <repositories>
        <repository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
      <pluginRepository>
          <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
      </pluginRepository>
    </pluginRepositories>
    Copy to Clipboard Toggle word wrap
  3. 要将 Maven 配置为自动管理 jboss-eap-ee BOM 中的 Jakarta EE 工件的版本,请将 BOM 添加到项目 pom.xml 文件的 & lt;dependencyManagement > 部分。例如:

    <dependencyManagement>
      <dependencies>
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-ee</artifactId>
            <version>8.0.2.GA-redhat-00007</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    Copy to Clipboard Toggle word wrap
  4. 将由 BOM 管理的 servlet API 工件添加到项目 pom.xml 文件的 < dependency > 部分,如下例所示:

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>
    Copy to Clipboard Toggle word wrap

11.13. 为您的可引导 JAR 启用 JSON 日志记录

您可以使用 CLI 脚本配置服务器日志记录配置,为可引导 JAR 启用 JSON 日志记录。启用 JSON 日志记录时,您可以使用 JSON 格式查看日志消息。

此流程中的示例演示了如何在裸机平台和 OpenShift 平台上为可引导 JAR 启用 JSON 日志记录。

先决条件

  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009
  • 您已创建了 Maven 项目,并添加用于创建应用程序的依赖项。请参阅 创建可引导 JAR Maven 项目

    重要

    在 Maven 项目的 Maven archetype 中,您必须指定特定于项目的 groupID 和 artifactID。例如:

    $ mvn archetype:generate \
    -DgroupId=com.example.logging \
    -DartifactId=logging \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false
    cd logging
    Copy to Clipboard Toggle word wrap
    注意

    流程中显示的示例指定以下属性:

    • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。

    您必须在项目中设置这些属性。例如:

    <properties>
        <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
    </properties>
    Copy to Clipboard Toggle word wrap

流程

  1. 将 JBoss Logging 和 Jakarta RESTful Web Services 依赖项(由 BOM 管理)添加到项目 pom.xml 文件的 <dependencies > 部分。例如:

    <dependencies>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    Copy to Clipboard Toggle word wrap
  2. pom.xml 文件的 <build > 元素中添加以下内容。例如:

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-packs>
    				<feature-pack>
    					<location>org.jboss.eap.xp:wildfly-galleon-pack</location>
    				</feature-pack>
    			</feature-packs>
    			<layers>
    				<layer>jaxrs-server</layer>
    			</layers>
    		</configuration>
    		<executions>
    			<execution>
    				<goals>
    					<goal>package</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap
  3. 创建用于存储 Java 文件的目录:

    $ mkdir -p APPLICATION_ROOT/src/main/java/com/example/logging/
    Copy to Clipboard Toggle word wrap

    其中 APPLICATION_ROOT 是包含应用的 pom.xml 配置文件的目录。

  4. 创建包含以下内容的 Java 文件 RestApplication.java,并将该文件保存到 APPLICATION_ROOT/src/main/java/com/example/logging/ 目录中:

    package com.example.logging;
    import jakarta.ws.rs.ApplicationPath;
    import jakarta.ws.rs.core.Application;
    
    @ApplicationPath("/")
    public class RestApplication extends Application {
    }
    Copy to Clipboard Toggle word wrap
  5. 创建包含以下内容的 Java 文件 HelloWorldEndpoint.java,并将该文件保存到 APPLICATION_ROOT/src/main/java/com/example/logging/ 目录中:

    package com.example.logging;
    
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.core.Response;
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Produces;
    
    import org.jboss.logging.Logger;
    @Path("/hello")
    public class HelloWorldEndpoint {
    
        private static Logger log = Logger.getLogger(HelloWorldEndpoint.class.getName());
        @GET
        @Produces("text/plain")
        public Response doGet() {
            log.debug("HelloWorldEndpoint.doGet called");
            return Response.ok("Hello from XP bootable jar!").build();
        }
    }
    Copy to Clipboard Toggle word wrap
  6. 创建一个 CLI 脚本,如 logging.cli,并将它保存到可引导 JAR 的可访问目录中,如 APPLICATION_ROOT/scripts 目录,其中 APPLICATION_ROOT 是 Maven 项目的根目录。该脚本必须包含以下命令:

    /subsystem=logging/logger=com.example.logging:add(level=ALL)
    /subsystem=logging/json-formatter=json-formatter:add(exception-output-type=formatted, pretty-print=false, meta-data={version="1"}, key-overrides={timestamp="@timestamp"})
    /subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=ALL)
    /subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=json-formatter)
    Copy to Clipboard Toggle word wrap
  7. 在插件 <configuration> 元素 中添加以下 配置提取:

    <cli-sessions>
            <cli-session>
            <script-files>
                <script>scripts/logging.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>
    Copy to Clipboard Toggle word wrap

    本例演示了 logging.cli CLI 脚本,该脚本修改服务器日志记录配置文件来为应用程序启用 JSON 日志记录。

  8. 将应用打包为可引导 JAR。

    $ mvn package
    Copy to Clipboard Toggle word wrap
  9. 可选 : 要在 JBoss EAP 裸机平台上运行应用程序,请按照在 JBoss EAP 裸机平台中使用可引导 JAR 中所述的步骤,但有以下区别:

    1. 启动应用程序:

      mvn wildfly-jar:run
      Copy to Clipboard Toggle word wrap
    2. 验证 :您可以通过在浏览器中指定以下 URL 来访问应用程序: http://127.0.0.1:8080/hello

      预期的输出:您可以在应用程序控制台中查看 JSON 格式的日志,包括 com.example.logging.HelloWorldEndpoint debug trace。

  10. 可选 : 要在 JBoss EAP OpenShift 平台上运行应用程序,请完成以下步骤:

    1. 在插件配置中添加 <cloud /> 元素。例如:

      <plugins>
         <plugin>
             ... <!-- You must evolve the existing configuration with the <cloud/> element  -->
             <configuration >
                 ...
                 <cloud/>
              </configuration>
          </plugin>
      </plugins>
      Copy to Clipboard Toggle word wrap
    2. 重建应用程序:

      $ mvn clean package
      Copy to Clipboard Toggle word wrap
    3. 使用 oc login 命令登录到您的 OpenShift 实例。
    4. 在 OpenShift 中创建一个新项目。例如:

      $ oc new-project bootable-jar-project
      Copy to Clipboard Toggle word wrap
    5. 输入以下 oc 命令来创建应用程序镜像:

      $ mkdir target/openshift && cp target/logging-bootable.jar target/openshift 
      1
      
      
      $ oc import-image ubi8/openjdk-17 --from=registry.redhat.io/ubi8/openjdk-17 --confirm
       
      2
      
      
      $ oc new-build --strategy source --binary --image-stream openjdk-17 --name logging 
      3
      
      
      $ oc start-build logging --from-dir target/openshift 
      4
      Copy to Clipboard Toggle word wrap
      1
      创建 target/openshift 子目录。打包的应用程序被复制到 openshift 子目录中。
      2
      将最新的 OpenJDK 17 镜像流标签和镜像信息导入到 OpenShift 项目中。
      3
      根据日志记录目录和 OpenJDK 17 镜像流创建构建配置。
      4
      使用 target/openshift 子目录作为二进制输入来构建应用。
    6. 部署应用程序:

      $ oc new-app logging
      
      $ oc expose svc/logging
      Copy to Clipboard Toggle word wrap
    7. 获取路由的 URL。

      $ oc get route logging --template='{{ .spec.host }}'
      Copy to Clipboard Toggle word wrap
    8. 使用上一命令返回的 URL,访问 Web 浏览器中的应用。例如:

      http://ROUTE_NAME/hello
      Copy to Clipboard Toggle word wrap
    9. 验证 : 发出以下命令来查看可用的 OpenShift pod 列表,并检查 pod 构建状态:

      $ oc get pods
      Copy to Clipboard Toggle word wrap

      访问应用程序的正在运行的 pod 日志。其中 APP_POD_NAME 是正在运行的 Pod 日志记录应用的名称。

      $ oc logs APP_POD_NAME
      Copy to Clipboard Toggle word wrap

      预期的结果:pod 日志采用 JSON 格式,并包含 com.example.logging.HelloWorldEndpoint debug trace。

您可以将 web-clustering 应用程序构建并打包为可引导 JAR。

先决条件

  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009
  • 您已创建了 Maven 项目,并添加用于创建 web-clustering 应用程序的依赖项。请参阅 创建可引导 JAR Maven 项目

    重要

    在设置 Maven 项目时,您必须在 Maven archetype 配置中指定值。例如:

    $ mvn archetype:generate \
    -DgroupId=com.example.webclustering \
    -DartifactId=web-clustering \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false
    cd web-clustering
    Copy to Clipboard Toggle word wrap
    注意

    流程中显示的示例指定以下属性:

    • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。

    您必须在项目中设置这些属性。例如:

    <properties>
        <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
    </properties>
    Copy to Clipboard Toggle word wrap

流程

  1. pom.xml 文件的 <build > 元素中添加以下内容。例如:

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
    			<layers>
    				<layer>datasources-web-server</layer>
    				<layer>web-clustering</layer>
    			</layers>
    		</configuration>
    		<executions>
    			<execution>
    				<goals>
    					<goal>package</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap
    注意

    这个示例使用 web-clustering Galleon 层启用 Web 会话共享。

  2. 使用以下配置更新 src/main/webapp/WEB-INF 目录中的 web.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="4.0"
             xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
        <distributable/>
    </web-app>
    Copy to Clipboard Toggle word wrap

    & lt;distributable /> 标签表示此 servlet 可以在多个服务器间分布。

  3. 创建用于存储 Java 文件的目录:

    $ mkdir -p APPLICATION_ROOT
    /src/main/java/com/example/webclustering/
    Copy to Clipboard Toggle word wrap

    其中 APPLICATION_ROOT 是包含应用的 pom.xml 配置文件的目录。

  4. 创建包含以下内容的 Java 文件 MyServlet.java,并将该文件保存到 APPLICATION_ROOT/src/main/java/com/example/webclustering/ 目录中。

    package com.example.webclustering;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    @WebServlet(urlPatterns = {"/clustering"})
    public class MyServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws IOException {
            response.setContentType("text/html;charset=UTF-8");
            long t;
            User user = (User) request.getSession().getAttribute("user");
            if (user == null) {
                t = System.currentTimeMillis();
                user = new User(t);
                request.getSession().setAttribute("user", user);
            }
            try (PrintWriter out = response.getWriter()) {
                out.println("<!DOCTYPE html>");
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Web clustering demo</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Session id " + request.getSession().getId() + "</h1>");
                out.println("<h1>User Created " + user.getCreated() + "</h1>");
                out.println("<h1>Host Name " + System.getenv("HOSTNAME") + "</h1>");
                out.println("</body>");
                out.println("</html>");
            }
        }
    }
    Copy to Clipboard Toggle word wrap

    MyServlet.java 中的内容定义客户端向其发送 HTTP 请求的端点。

  5. 创建包含以下内容的 Java 文件 User.java,并将文件保存到 APPLICATION_ROOT/src/main/java/com/example/webclustering/ 目录中。

    package com.example.webclustering;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private final long created;
    
        User(long created) {
            this.created = created;
        }
        public long getCreated() {
            return created;
        }
    }
    Copy to Clipboard Toggle word wrap
  6. 打包应用程序:

    $ mvn package
    Copy to Clipboard Toggle word wrap
  7. 可选 : 要在 JBoss EAP 裸机平台上运行应用程序,请按照在 JBoss EAP 裸机平台中使用可引导 JAR 中所述的步骤,但有以下区别:

    1. 在 JBoss EAP 裸机平台上,您可以使用 java -jar 命令运行多个可引导 JAR 实例,如下例所示:

      $ java -jar target/web-clustering-bootable.jar -Djboss.node.name=node1
      
      $ java -jar target/web-clustering-bootable.jar -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=10
      Copy to Clipboard Toggle word wrap
    2. 验证 :您可以访问节点 1 实例中的应用程序: http://127.0.0.1:8080/clustering。记录用户会话 ID 和用户创建时间。

      终止此实例后,您可以访问节点 2 实例: http://127.0.0.1:8090/clustering。用户必须与会话 ID 和节点 1 实例的用户创建时间匹配。

  8. 可选 : 要在 JBoss EAP OpenShift 平台上运行应用程序,请按照在 JBoss EAP OpenShift 平台上使用可引导 JAR 中所述的步骤,但完成以下步骤:

    1. 在插件配置中添加 <cloud /> 元素。例如:

      <plugins>
         <plugin>
             ... <!-- You must evolve the existing configuration with the <cloud/> element  -->
             <configuration >
                 ...
                 <cloud/>
              </configuration>
          </plugin>
      </plugins>
      Copy to Clipboard Toggle word wrap
    2. 重建应用程序:

      $ mvn clean package
      Copy to Clipboard Toggle word wrap
    3. 使用 oc login 命令登录到您的 OpenShift 实例。
    4. 在 OpenShift 中创建一个新项目。例如:

      $ oc new-project bootable-jar-project
      Copy to Clipboard Toggle word wrap
    5. 若要在 JBoss EAP OpenShift 平台上运行 web-clustering 应用,必须为 Pod 在其中运行的服务帐户授予授权访问权限。然后,服务帐户可以访问 Kubernetes REST API。以下示例显示了为服务帐户授予授权访问权限:

      $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
      Copy to Clipboard Toggle word wrap
    6. 输入以下 oc 命令来创建应用程序镜像:

      $ mkdir target/openshift && cp target/web-clustering-bootable.jar target/openshift 
      1
      
      
      $ oc import-image ubi8/openjdk-17 --from=registry.redhat.io/ubi8/openjdk-17 --confirm 
      2
      
      
      $ oc new-build --strategy source --binary --image-stream openjdk-17 --name web-clustering 
      3
      
      
      $ oc start-build web-clustering --from-dir target/openshift 
      4
      Copy to Clipboard Toggle word wrap
      1
      创建 target/openshift 子目录。打包的应用程序被复制到 openshift 子目录。
      2
      将最新的 OpenJDK 17 镜像流标签和镜像信息导入到 OpenShift 项目中。
      3
      根据 web-clustering 目录和 OpenJDK 17 镜像流创建构建配置。
      4
      使用 target/openshift 子目录作为二进制输入来构建应用程序。
    7. 部署应用程序:

      $ oc new-app web-clustering -e KUBERNETES_NAMESPACE=$(oc project -q)
      
      $ oc expose svc/web-clustering
      Copy to Clipboard Toggle word wrap
      重要

      您必须使用 KUBERNETES_NAMESPACE 环境变量查看当前 OpenShift 命名空间中的其他 pod;否则,服务器会尝试从 default 命名空间检索 pod。

    8. 获取路由的 URL。

      $ oc get route web-clustering --template='{{ .spec.host }}'
      Copy to Clipboard Toggle word wrap
    9. 使用上一命令返回的 URL,访问 Web 浏览器中的应用。例如:

      http://ROUTE_NAME/clustering
      Copy to Clipboard Toggle word wrap

      记录用户会话 ID 和用户创建时间。

    10. 将应用程序扩展到两个 pod:

      $ oc scale --replicas=2 deployments web-clustering
      Copy to Clipboard Toggle word wrap
    11. 发出以下命令来查看可用的 OpenShift pod 列表,并检查 pod 构建状态:

      $ oc get pods
      Copy to Clipboard Toggle word wrap
    12. 使用 oc delete pod web-clustering-POD_NAME命令终止 最旧的 pod,其中 POD_NAME 是最旧的 pod 的名称。
    13. 再次访问应用程序:

      http://ROUTE_NAME/clustering
      Copy to Clipboard Toggle word wrap

      预期的结果:会话 ID 和新 pod 生成的创建时间与终止的 pod 的创建时间匹配。这表示启用了 Web 会话数据存储。

您可以使用 CLI 脚本为可引导 JAR 启用 HTTP 身份验证。此脚本会在您的服务器中添加安全域和一个安全域。

先决条件

  • 您已检查了最新的 Maven 插件版本,如 9.minor.micro.Final-redhat-XXXXX,其中 9 是主版本,次版本微型 版本,X 是 Red Hat 构建号。例如: 9.0.1.Final-redhat-00009
  • 您已创建了 Maven 项目,并添加用于创建需要 HTTP 身份验证的应用程序的依赖项。请参阅 创建可引导 JAR Maven 项目

    重要

    在设置 Maven 项目时,您必须在 Maven archetype 配置中指定 HTTP 身份验证值。例如:

    $ mvn archetype:generate \
    -DgroupId=com.example.auth \
    -DartifactId=authentication \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false
    cd authentication
    Copy to Clipboard Toggle word wrap
    注意

    流程中显示的示例指定以下属性:

    • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。

    您必须在项目中设置这些属性。例如:

    <properties>
        <bootable.jar.maven.plugin.version>9.0.1.Final-redhat-00009</bootable.jar.maven.plugin.version>
    </properties>
    Copy to Clipboard Toggle word wrap

流程

  1. pom.xml 文件的 <build > 元素中添加以下内容。例如:

    <plugins>
    	<plugin>
    		<groupId>org.wildfly.plugins</groupId>
    		<artifactId>wildfly-jar-maven-plugin</artifactId>
    		<version>${bootable.jar.maven.plugin.version}</version>
    		<configuration>
    			<channels>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-8.0</artifactId>
    					</manifest>
    				</channel>
    				<channel>
    					<manifest>
    						<groupId>org.jboss.eap.channels</groupId>
    						<artifactId>eap-xp-5.0</artifactId>
    					</manifest>
    				</channel>
    			</channels>
    			<feature-pack-location>org.jboss.eap.xp:wildfly-galleon-pack</feature-pack-location>
    			<layers>
    				<layer>datasources-web-server</layer>
    			</layers>
    		</configuration>
    		<executions>
    			<execution>
    				<goals>
    					<goal>package</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap

    示例显示包含包含 elytron 子系统的 datasources-web-server Galleon 层。

  2. 更新 src/main/webapp/WEB-INF 目录中的 web.xml 文件。例如:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="4.0"
             xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
    
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>Example Realm</realm-name>
        </login-config>
    
    </web-app>
    Copy to Clipboard Toggle word wrap
  3. 创建用于存储 Java 文件的目录:

    $ mkdir -p APPLICATION_ROOT/src/main/java/com/example/authentication/
    Copy to Clipboard Toggle word wrap

    其中 APPLICATION_ROOT 是 Maven 项目的根目录。

  4. 创建包含以下内容的 Java 文件 TestServlet.java,并将该文件保存到 APPLICATION_ROOT/src/main/java/com/example/authentication/ 目录中。

    package com.example.authentication;
    
    import jakarta.servlet.annotation.HttpMethodConstraint;
    import jakarta.servlet.annotation.ServletSecurity;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet(urlPatterns = "/hello")
    @ServletSecurity(httpMethodConstraints = { @HttpMethodConstraint(value = "GET", rolesAllowed = { "Users" }) })
    public class TestServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            PrintWriter writer = resp.getWriter();
            writer.println("Hello " + req.getUserPrincipal().getName());
            writer.close();
        }
    
    }
    Copy to Clipboard Toggle word wrap
  5. 创建一个 CLI 脚本,如 authentication.cli,并将它保存到可引导 JAR 的可访问目录中,如 APPLICATION_ROOT/scripts 目录。该脚本必须包含以下命令:

    /subsystem=elytron/properties-realm=bootable-realm:add(users-properties={relative-to=jboss.server.config.dir, path=bootable-users.properties, plain-text=true}, groups-properties={relative-to=jboss.server.config.dir, path=bootable-groups.properties})
    /subsystem=elytron/security-domain=BootableDomain:add(default-realm=bootable-realm, permission-mapper=default-permission-mapper, realms=[{realm=bootable-realm, role-decoder=groups-to-roles}])
    
    /subsystem=undertow/application-security-domain=other:write-attribute(name=security-domain, value=BootableDomain)
    Copy to Clipboard Toggle word wrap
  6. 在插件 <configuration> 元素 中添加以下 配置提取:

    <cli-sessions>
        <cli-session>
            <script-files>
                <script>scripts/authentication.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>
    Copy to Clipboard Toggle word wrap

    本例演示了 authentication.cli CLI 脚本,它将默认 undertow 安全域配置为为您的服务器定义的安全域。

    注意

    您可以选择在运行时执行 CLI 脚本,而不是打包时间。为此,请跳过这一步,然后继续下一步 10。

  7. 在 Maven 项目的根目录中,创建一个目录来存储 JBoss EAP JAR Maven 插件添加到可引导 JAR 中的属性文件:

    $ mkdir -p APPLICATION_ROOT/extra-content/standalone/configuration/
    Copy to Clipboard Toggle word wrap

    其中 APPLICATION_ROOT 是包含应用的 pom.xml 配置文件的目录。

    此目录存储文件,如 bootable-users.propertiesbootable-groups.properties 文件。

    bootable-users.properties 文件包含以下内容:

    testuser=bootable_password
    Copy to Clipboard Toggle word wrap

    bootable-groups.properties 文件包含以下内容:

    testuser=Users
    Copy to Clipboard Toggle word wrap
  8. 将以下 extra-content-content-dirs 元素添加到现有 < configuration> 元素中:

    <extra-server-content-dirs>
                <extra-content>extra-content</extra-content>
    </extra-server-content-dirs>
    Copy to Clipboard Toggle word wrap

    extra-content 目录包含属性文件。

  9. 将应用打包为可引导 JAR。

    $ mvn package
    Copy to Clipboard Toggle word wrap
  10. 启动应用程序:

    mvn wildfly-jar:run
    Copy to Clipboard Toggle word wrap

    如果您选择了跳过第 6 步,且在构建期间没有执行 CLI 脚本,使用以下命令启动应用程序:

    mvn wildfly-jar:run -Dwildfly.bootable.arguments=--cli-script=scripts/authentication.cli
    Copy to Clipboard Toggle word wrap
  11. 调用 servlet,但不指定凭证:

    curl -v http://localhost:8080/hello
    Copy to Clipboard Toggle word wrap

    预期输出:

    HTTP/1.1 401 Unauthorized
    ...
    WWW-Authenticate: Basic realm="Example Realm"
    Copy to Clipboard Toggle word wrap
  12. 调用服务器并指定您的凭证。例如:

    $ curl -v -u testuser:bootable_password http://localhost:8080/hello
    Copy to Clipboard Toggle word wrap

    返回 HTTP 200 状态,表示为可引导 JAR 启用了 HTTP 身份验证。例如:

    HTTP/1.1 200 OK
    ....
    Hello testuser
    Copy to Clipboard Toggle word wrap

第 12 章 Helm Chart 用例

Helm 是一个开源软件包管理器,允许您在 OpenShift 上构建、部署和维护您的 JBoss EAP XP 5.0 应用程序。

您可以将 Helm Chart 与 JBoss EAP XP 5.0 搭配使用:

  • 使用 OpenShift Source-to-Image (S2I),从托管在 Git 存储库上的 Maven 项目构建应用程序。
  • 使用 OpenShift 集群(TLS 配置、用于公开应用的公共路由等)在 OpenShift 上部署应用镜像。
  • 使用 Helm Chart 构建应用程序镜像,并使用 JBoss EAP XP operator 来部署镜像。
  • 使用其他方法为 JBoss EAP XP 构建应用程序镜像,并使用 Helm Chart。
重要
  • 您可以使用 JBoss EAP XP 5.0 构建 Java 应用程序,以创建 Bootable Jar 或 Jakarta 部署(与 JBoss EAP 8.0 类似)。
  • 如果您的 Java 应用程序是 Bootable Jar,可以使用 JBoss EAP XP 5.0 的 Helm Chart 来构建应用程序镜像(使用其默认 build.mode 设置为 bootable-jar)。
  • 如果您的 Java 应用程序是 Jakarta 部署,您可以通过将 Helm Chart 的 build.mode 设置为 s2i来使用 Source-to-Image (类似 JBoss EAP 8.0)来构建应用程序镜像

您可以通过配置构建和部署值来使用 Helm Chart 构建 JBoss EAP XP 应用程序。您必须提供 Git 存储库的 URL,该 URL 在构建配置中托管应用程序代码,输出是包含构建的应用程序镜像的 ImageStreamTag 资源。要部署应用程序,您必须提供包含您构建的应用程序镜像的 ImageStreamTag 资源。输出是您部署的应用程序和其他相关资源,可用于从 OpenShift 内部和外部访问您的应用。

先决条件

  • 您可以访问 OpenShift Development 控制台。
  • 您有托管在 Git 存储库中的 JBoss EAP XP 应用的源代码。
  • 您的应用程序是一个 Maven 项目。
  • 您已将应用配置为使用 org.jboss.eap.plugins:eap-maven-plugin 来调配您的 JBoss EAP XP 5.0 服务器。
注意
  • 此流程仅关注使用 OpenShift 开发控制台。
  • 一些表单部分默认是折叠的。点击 > 来展开并查看其内容。另外,您不需要更新这些部分才能继续。

流程

  1. 登录 OpenShift 开发控制台。

    1. 在下拉菜单中点击 Helm
    2. 在右上角点击 create,然后点 Helm Release
    3. 选择 JBoss EAP XP 5。
    4. create 并选择 configure via YAML view
  2. 从源存储库构建应用程序镜像:

    build:
      uri: <git repository URL of your application>
      mode: s2i
    Copy to Clipboard Toggle word wrap
  3. 可选:使用 sourceSecret 键在 build 部分输入 secret:

    build:
      uri: <git repository URL of your application>
      mode: s2i
      sourceSecret: <name of secret login to your Git repository>
    Copy to Clipboard Toggle word wrap

验证

  • 如果您的应用程序已被成功部署,您应该在 OpenShift Development 控制台中看到 Helm 发行版本旁的部署徽标。

使用应用程序 pom.xml 中的 eap-maven-plugin 来调配您的 JBoss EAP 服务器。确保此插件在 OpenShift 配置集、默认配置集或任何其他活跃配置集中配置,OpenShift 配置集优先于所有其他活跃的配置集。

重要

您必须将 build.mode 设置为 S2I。这是因为 JBoss EAP XP Helm Chart 的默认值为 bootable-jar

注意

build.s2i.featurePacks,build.s2i.galleonLayersbuild.s2i.channels 字段已弃用。

在 JBoss EAP XP 5.0 中,您可以将应用构建为 Bootable JAR,以了解有关如何执行此操作的更多信息,请参阅 可引导 JAR

另外,在 JBoss EAP XP 5.0 中,您可以为 JBoss EAP XP 5.0 配置 Helms Chart,以基于 Bootable JAR 构建应用程序。

先决条件

  • 您已登录到 OpenShift Development 控制台。
  • 您有托管在 Git 存储库中的 JBoss EAP XP 应用的源代码。
  • 您的应用程序是一个 Maven 项目。您已将应用程序配置为使用 Maven 插件 org.wildfly.plugins:wildfly-jar-maven-plugin 创建可引导 JAR。如需更多信息,请参阅 创建可引导 JAR Maven 项目
12.1.2.1. 使用 Bootable JAR 构建应用程序镜像

您可以通过在 OpenShift 开发控制台中配置 build 部分,使用 Helms Chart 构建 JBoss EAP XP 应用程序镜像。

注意
  • 如果使用 Helm Chart 构建应用程序,则必须使用引用 Git 仓库的 Git URL 指定 build.url 字段。
  • 您必须将 build.mode 字段设置为 bootable-jar

OpenShift 卷可让容器存储和共享来自不同来源的数据,包括云存储、网络文件系统(NFS)或主机机器。您可以使用 Helm Chart (OpenShift 软件包管理器)以一致、可重复的方式部署应用程序。通过将卷挂载添加到 Helm Chart 中,您可以使应用程序能够在部署之间持久保留数据。

12.2.1. 在 JBoss EAP XP 上使用 Helm Chart 挂载卷

此流程解释了如何在 JBoss EAP XP 上使用 Helm Chart 将 secret 挂载为卷。另外,您还可以使用它来挂载 ConfigMap。此操作可让应用程序安全地访问和使用数据,防止它被未授权访问或篡改。例如,通过将 secret 挂载为卷,您存储在机密中的敏感数据将显示为一个文件,在运行已挂载机密的 POD 中。

先决条件

  • 您可以访问 OpenShift Development 控制台
  • 您已创建了一个 secret。例如,您已创建了名为 eap-app-secret 的机密,该机密引用 keystore.jks 等文件。
  • 您已找出在容器文件系统中挂载 secret 的位置。例如,目录 /etc/jgroups-encrypt-secre-secret-volume 是挂载 secret 文件的目录,如 keystore.jks
  • 托管 Git 存储库中的 JBoss EAP XP 应用的源代码。
  • 您的应用程序是一个 Maven 项目。
  • 您已将应用配置为使用 org.jboss.eap.plugins:eap-maven-plugin 来调配您的 JBoss EAP XP 5.0 服务器。

流程

  1. 登录 OpenShift 开发控制台。

    1. 在下拉菜单中点击 Helm
    2. 在右上角点击 create,然后点 Helm Release
    3. 选择 JBoss EAP XP 5。
    4. create 并选择 configure via YAML view
  2. 编辑 deploy.volumes 字段中指定卷的 YAML 文件,并配置要使用的 secret。您必须提供卷名称和 secret 的 secretName 的名称:

    volumes:
      - name: eap-jgroups-keystore-volume
        secret:
            secretName: eap-app-secret
    Copy to Clipboard Toggle word wrap
  3. 使用部署配置中的 deploy.volumeMounts 将卷挂载到文件系统中:

    volumeMounts:
      - name: eap-jgroups-keystore-volume
        mountPath: /etc/jgroups-encrypt-secret-volume
        readOnly: true
    Copy to Clipboard Toggle word wrap

    当 pod 启动时,容器将 keystore.jks 文件挂载到 /etc/jgroups-encrypt-secret-volume/keystore.jks 位置。

第 13 章 JBoss EAP 中的可观察性

如果您是开发人员或系统管理员,则 可观察性 是一种一系列实践和技术,您可以根据应用中的某些信号、应用中的问题位置和来源来确定。最常见的信号是指标、事件和追踪。JBoss EAP 使用 OpenTelemetry 进行 可观察性

13.1. JBoss EAP 中的 OpenTelemetry

OpenTelemetry 是一组工具、应用程序编程接口(API)和软件开发套件(SDK),可用于为应用程序检测、生成、收集和导出遥测数据。遥测数据包括指标数据、日志和追踪。分析应用程序的遥测数据可帮助您提高应用程序的性能。JBoss EAP 通过 opentelemetry 子系统提供 OpenTelemetry 功能。

注意

Red Hat JBoss Enterprise Application Platform 8.0 仅提供 OpenTelemetry 追踪功能。

重要

OpenTelemetry 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview

13.2. JBoss EAP 中的 OpenTelemetry 配置

您可以使用 opentelemetry 子系统在 JBoss EAP 中配置 OpenTelemetry 的许多方面。这包括 exporter、span 处理器和 sampler。

exporter
要分析和视觉化追踪,您可以将它们导出到收集器,如 OpenTelemetry Collector (OTLP)。您可以将 JBoss EAP 配置为使用支持 OpenTelemetry 协议的任何收集器。
span 处理器
您可以将 span 处理器配置为导出范围,因为它们是生成或批量的。您还可以将 trace 数量配置为导出。
sampler
您可以通过配置 sampler 将 trace 数量配置为记录。

配置示例

以下 XML 是完整的 OpenTelemetry 配置的示例,包括默认值。进行更改时,JBoss EAP 不会保留默认值,因此您的配置可能会不同。

<subsystem xmlns="urn:wildfly:opentelemetry:1.0"
        service-name="example">
    <exporter
        type="otlp"
        endpoint="http://localhost:4317"/>
    <span-processor
        type="batch"
        batch-delay="4500"
        max-queue-size="128"
        max-export-batch-size="512"
        export-timeout="45"/>
    <sampler
        type="on"/>
</subsystem>
Copy to Clipboard Toggle word wrap
注意

您不能使用 OpenShift 路由对象与 OpenTelemetry Collector 端点连接。反之,使用 http:// <ip_address> : & lt;port>http:// <service_name> : <port>

13.3. JBoss EAP 中的 OpenTelemetry tracing

JBoss EAP 提供 OpenTelemetry 跟踪,可帮助您在用户请求通过应用程序的不同部分时跟踪用户请求的进度。通过分析 trace,您可以提高应用程序的性能并调试可用性问题。

OpenTelemetry 追踪由以下组件组成:

Trace
请求在应用程序中处理的操作集合。
Span
trace 中的单个操作。它提供请求、错误和持续时间(RED)指标,并包含 span 上下文。
span 上下文
代表包含 span 的一个请求的一组唯一标识符。

JBoss EAP 自动跟踪对 Jakarta RESTful Web Services 应用程序的 REST 调用,以及容器管理的 Jakarta RESTful Web 服务客户端调用。JBoss EAP 会隐式跟踪 REST 调用,如下所示:

  • 对于每个传入的请求:

    • JBoss EAP 从请求中提取 span 上下文。
    • JBoss EAP 启动一个新的范围,然后在请求完成后关闭它。
  • 对于每个传出请求:

    • JBoss EAP 将 span 上下文注入到请求中。
    • JBoss EAP 启动一个新的范围,然后在请求完成后关闭它。

除了隐式追踪外,您还可以通过将 Tracer 实例注入应用程序来创建自定义 span,以进行精细的追踪。

13.4. 在 JBoss EAP 中启用 OpenTelemetry 追踪

要在 JBoss EAP 中使用 OpenTelemetry tracing,您必须首先启用 opentelemetry 子系统。

先决条件

  • 已安装带有 JBoss EAP XP 5.0 的 JBoss EAP 8.0。

流程

  1. 使用管理 CLI 添加 OpenTelemetry 扩展。

    /extension=org.wildfly.extension.opentelemetry:add
    Copy to Clipboard Toggle word wrap
  2. 使用管理 CLI 启用 opentelemetry 子系统。

    /subsystem=opentelemetry:add
    Copy to Clipboard Toggle word wrap
  3. 重新加载 JBoss EAP。

    reload
    Copy to Clipboard Toggle word wrap

13.5. 配置 opentelemetry 子系统

您可以配置 opentelemetry 子系统来设置追踪的不同方面。根据您用来观察追踪的收集器配置它们。

先决条件

流程

  1. 为 trace 设置导出器类型。

    语法

    /subsystem=opentelemetry:write-attribute(name=exporter-type, value=<exporter_type>)
    Copy to Clipboard Toggle word wrap

    Example

    /subsystem=opentelemetry:write-attribute(name=exporter-type, value=otlp)
    Copy to Clipboard Toggle word wrap

  2. 设置要导出 trace 的端点。

    语法

    /subsystem=opentelemetry:write-attribute(name=endpoint, value=<URL:port>)
    Copy to Clipboard Toggle word wrap

    Example

    /subsystem=opentelemetry:write-attribute(name=endpoint, value=http://localhost:4317)
    Copy to Clipboard Toggle word wrap

  3. 设置导出 trace 的服务名称。

    语法

    /subsystem=opentelemetry:write-attribute(name=service-name, value=<service_name>)
    Copy to Clipboard Toggle word wrap

    Example

    /subsystem=opentelemetry:write-attribute(name=service-name, value=exampleOpenTelemetryService)
    Copy to Clipboard Toggle word wrap

第 14 章 参考

14.1. MicroProfile Config 参考

14.1.1. 默认 MicroProfile Config 属性

MicroProfile Config 规范默认定义三个 ConfigSources

ConfigSources 根据常规数字进行排序。如果需要为后续部署覆盖配置,则在较高情况的 ConfigSource 之前会覆盖较低或dinal ConfigSource

Expand
表 14.1. 默认 MicroProfile Config 属性
ConfigSourceordinal

系统属性

400

环境变量

300

classpath 上找到的属性文件 META-INF/microprofile-config.properties

100

14.1.2. MicroProfile Config SmallRye ConfigSources

microprofile-config-smallrye 项目定义了除默认的 MicroProfile ConfigSources 外,您还可以使用的更多 ConfigSources

Expand
表 14.2. 其他 MicroProfile 配置属性
ConfigSourceordinal

subsystem 中的 config-source

100

目录中的 ConfigSource

100

来自类的 ConfigSource

100

没有为这些 ConfigSources 指定明确的 ordinal。它们继承 MicroProfile 配置规范中找到的默认值。

14.2. MicroProfile Fault Tolerance 参考

14.2.1. MicroProfile Fault Tolerance 配置属性

小型容错规范除了 MicroProfile 容错规范中定义的属性外,还定义了下列属性:

Expand
表 14.3. MicroProfile Fault Tolerance 配置属性
属性默认值描述

io.smallrye.faulttolerance.mainThreadPoolSize

100

线程池中的最大线程数量。

io.smallrye.faulttolerance.mainThreadPoolQueueSize

-1 (unbounded)

线程池应使用的队列的大小。

14.3. MicroProfile JWT 参考

14.3.1. MicroProfile Config JWT 标准属性

microprofile-jwt-smallrye 子系统支持以下 MicroProfile 配置标准属性:

Expand
表 14.4. MicroProfile Config JWT 标准属性
属性默认描述

mp.jwt.verify.publickey

NONE

使用其中一个支持的格式编码的公钥的字符串。如果您设置了 mp.jwt.verify.publickey.location,则不要设置。

mp.jwt.verify.publickey.location

NONE

公钥的位置可以是相对路径或 URL。如果您设置了 mp.jwt.verify.publickey,则不要设置。

mp.jwt.verify.issuer

NONE

任何 JWT 令牌的预期值 是被 验证的 JWT 令牌的声明。

microprofile-config.properties 配置示例:

mp.jwt.verify.publickey.location=META-INF/public.pem
mp.jwt.verify.issuer=jwt-issuer
Copy to Clipboard Toggle word wrap

14.4. MicroProfile OpenAPI 参考

14.4.1. MicroProfile OpenAPI 配置属性

除了标准 MicroProfile OpenAPI 配置属性外,JBoss EAP 还支持下列额外 MicroProfile OpenAPI 属性:这些属性可以在全局和应用范围内应用。

Expand
表 14.5. JBoss EAP 中的 MicroProfile OpenAPI 属性
属性默认值描述

mp.openapi.extensions.enabled

true

启用或禁用 OpenAPI 端点的注册。

当设置为 false 时,禁用 OpenAPI 文档的生成。您可以使用 config 子系统或配置文件中每个应用(如 /META-INF/microprofile-config.properties )设置值。

您可以对此属性进行参数化,以选择性地在不同环境中启用或禁用 microprofile-openapi-smallrye,如生产或开发。

您可以使用此属性来控制与给定虚拟主机关联的应用应生成 MicroProfile OpenAPI 模型。

mp.openapi.extensions.path

/openapi

您可以使用此属性为与虚拟主机关联的多个应用程序生成 OpenAPI 文档。

在与同一虚拟主机关联的每个应用程序上设置不同的 mp.openapi.extensions.path

mp.openapi.extensions.servers.relative

true

指明自动生成的服务器记录是绝对或相对于 OpenAPI 端点的位置。

需要服务器记录来确保存在非根上下文路径,OpenAPI 文档的用户可以构建与 OpenAPI 端点主机相关的 REST 服务的有效 URL。

true 表示服务器记录相对于 OpenAPI 端点的位置。生成的记录包含部署的上下文路径。

当设置为 false 时,JBoss EAP XP 生成服务器记录,包括可以访问部署的所有协议、主机和端口。

14.5. MicroProfile Reactive Messaging 参考

以下是 MicroProfile 配置规范所需的被动消息传递属性密钥前缀的列表:

  • mp.messaging.incoming.[channel-name].[attribute]=[value]
  • mp.messaging.outgoing.[channel-name].[attribute]=[value]
  • mp.messaging.connector.[connector-name].[attribute]=[value]

请注意,channel-name@Incoming.value ()@Outgoing.value ()。要清楚起见,请查看这个一组连接器方法示例:

@Outgoing("to")
public int send() {
   int i = // Randomly generated...
   return i;
}

@Incoming("from")
public void receive(int i) {
   // Process payload
}
Copy to Clipboard Toggle word wrap

在本例中,所需的属性前缀如下:

  • mp.messaging.incoming.from.这定义了 receive () 方法。
  • mp.messaging.outgoing.to.这将定义 send () 方法。

请记住,这是一个示例。因为不同的连接器可识别不同的属性,所以您指示的前缀取决于您要配置的连接器。

以下是重新主动消息传递流和通过 @Channel 和 Emitter 结构触发的代码之间的数据交换示例:

@Path("/")
@ApplicationScoped
class MyBean {
    @Inject @Channel("my-stream")
    Emitter<String> emitter; 
1


    Publisher<String> dest;

    public MyBean() { 
2

    }

    @Inject
    public MyBean(@Channel("my-stream") Publisher<String> dest) {
        this.dest = subscribeAndAllowMultipleSubscriptions(dest);
    }

    private Publisher subscribeAndAllowMultipleSubscriptions(Publisher delegate) {
    } 
3
 
4
 
5


    @POST
    public PublisherBuilder<String> publish(@FormParam("value") String value) {
        return emitter.send(value);
    }

    @GET
    public Publisher poll() {
        return dest;
    }

    @PreDestroy
    public void close() { 
6


    }
}
Copy to Clipboard Toggle word wrap

行中详情:

1
嵌套构造器的发布程序。
2
您需要此空构造器来满足 Java 规范的上下文和依赖注入(CDI)。
3
订阅委派。
4
在可以处理多个订阅的发布程序中嵌套委托。
5
嵌套发布程序从委派中转发数据。
6
取消订阅被动消息传递提供的发布程序。

在本例中,MicroProfile Reactive Messaging 正在侦听 my-stream 内存流,因此通过 Emitter 发送的消息会收到注入的发布者。但请注意,需要满足以下条件才能使这个数据交换成功:

  1. 在调用 Emitter.send () 之前,该频道必须具有有效的订阅。在本例中,请注意构造器调用的 subscribeAndAllowMultipleSubscriptions () 方法确保 bean 可用于用户代码调用时具有活跃的订阅。
  2. 在注入的 publisher 中只能有一个 订阅 。如果要使用 REST 调用公开接收发布程序,其中每个调用 poll () 方法会导致对 dest publisher 的新订阅,您必须实施自己的发布程序,以便从注入的每个客户端广播数据。

14.5.3. Apache Kafka 用户 API

您可以使用 Apache Kafka 用户 API 来获取有关收到消息 Kafka 的更多信息,并影响 Kafka 处理消息的方式。此 API 存储在 io/smallrye/reactive/messaging/kafka/api 软件包中,它由以下类组成:

  • IncomingKafkaRecordMetadata.这个元数据包含以下信息:

    • Kafka 记录 密钥,由 消息 表示。
    • 用于 消息的 Kafka 主题和 分区 以及这些 消息中 的偏移量。
    • Message timestamptimestampType
    • Message 标头.这些是应用程序可在生成端附加的信息,并在消费端接收信息。
  • OutgoingKafkaRecordMetadata.使用这个元数据,您可以指定或覆盖 Kafka 处理信息的方式。它包含以下信息:

    • Kafka 视为消息键的密钥。
    • 您希望 Kafka 使用 的主题
    • 分区
    • 时间戳,如果您不希望 Kafka 生成 的时间戳
    • 标头.
  • KafkaMetadataUtil 包含将 OutgoingKafkaRecordMetadata 写入 Message 的工具方法,并从 Message 读取 IncomingKafkaRecordMetadata
重要

如果您将 OutgoingKafkaRecordMetadata 写入发送到未映射到 Kafka 的频道的消息,则被动消息传递框架会忽略它。相反,如果您从未映射到 Kafka 的频道 读取 IncomingKafkaRecordMetadata,则该消息会返回 null

如何写入和读取消息 的示例
@Inject
@Channel("from-user")
Emitter<Integer> emitter;

@Incoming("from-user")
@Outgoing("to-kafka")
public Message<Integer> send(Message<Integer> msg) {
    // Set the key in the metadata
    OutgoingKafkaRecordMetadata<String> md =
            OutgoingKafkaRecordMetadata.<String>builder()
                .withKey("KEY-" + i)
                .build();
    // Note that Message is immutable so the copy returned by this method
    // call is not the same as the parameter to the method
    return KafkaMetadataUtil.writeOutgoingKafkaMetadata(msg, md);
}

@Incoming("from-kafka")
public CompletionStage<Void> receive(Message<Integer> msg) {
    IncomingKafkaRecordMetadata<String, Integer> metadata =
        KafkaMetadataUtil.readIncomingKafkaMetadata(msg).get();

    // We can now read the Kafka record key
    String key = metadata.getKey();

    // When using the Message wrapper around the payload we need to explicitly ack
    // them
    return msg.ack();
}
Copy to Clipboard Toggle word wrap
microprofile-config.properties 文件中的 Kafka 映射示例
kafka.bootstrap.servers=kafka:9092

mp.messaging.outgoing.to-kafka.connector=smallrye-kafka
mp.messaging.outgoing.to-kafka.topic=some-topic
mp.messaging.outgoing.to-kafka.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
mp.messaging.outgoing.to-kafka.key.serializer=org.apache.kafka.common.serialization.StringSerializer

mp.messaging.incoming.from-kafka.connector=smallrye-kafka
mp.messaging.incoming.from-kafka.topic=some-topic
mp.messaging.incoming.from-kafka.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
mp.messaging.incoming.from-kafka.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
Copy to Clipboard Toggle word wrap
注意

您必须为传出频道指定 key.serializer,并为传入频道指定 key.deserializer

这是 Kafka 连接器的简单 microprofile-config.properties 文件示例。其属性与示例中的属性对应 "MicroProfile 重新主动消息传递连接器,以与外部消息传递系统集成"。

kafka.bootstrap.servers=kafka:9092

mp.messaging.outgoing.to.connector=smallrye-kafka
mp.messaging.outgoing.to.topic=my-topic
mp.messaging.outgoing.to.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer

mp.messaging.incoming.from.connector=smallrye-kafka
mp.messaging.incoming.from.topic=my-topic
mp.messaging.incoming.from.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
Copy to Clipboard Toggle word wrap
Expand
表 14.6. 条目的讨论
entry描述

这些是"频道"。

发送,receive

这些是"方法"。

请注意, 频道位于 send () 方法,而 from 频道则位于 receive () 方法。

kafka.bootstrap.servers=kafka:9092

这将指定应用程序必须连接到的 Kafka 代理的 URL。您还可以在频道级别指定一个 URL,如下所示: mp.messaging.outgoing.to.bootstrap.servers=kafka:9092

mp.messaging.outgoing.to.connector=smallrye-kafka

这表示您希望要频道从 Kafka 接收信息。

小型被动消息传递是用于构建应用程序的框架。请注意,smallrye-kafka 值是 SmallRye 特定于重新主动的消息传递。如果您使用 Galleon 置备自己的服务器,您可以通过包含 microprofile-reactive-messaging-kafka Galleon 层来启用 Kafka 集成。

mp.messaging.outgoing.to.topic=my-topic

这表示您要将数据发送到名为 my-topic 的 Kafka 主题。

Kafka "topic" 是一个类别或源名称,信息存储在并发布到其中。所有 Kafka 信息都组织为主题。生产者应用将数据写入主题和消费者应用, 主题中读取数据。

mp.messaging.outgoing.to.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer

这告知连接器使用 IntegerSerializer 来序列化 send () 方法输出的值。Kafka 为标准 Java 类型提供序列化器。您可以通过编写实现 org.apache.kafka.common.serialization.Serializer 的类来实现自己的序列化器,然后在部署中包含该类。

mp.messaging.incoming.from.connector=smallrye-kafka

这表示您要使用 from 频道来接收来自 Kafka 的信息。同样,smallrye-kafka 的值是 SmallRye reactive messaging-specific。

mp.messaging.incoming.from.topic=my-topic

这表示您的连接器应该从名为 my-topic 的 Kafka 主题中读取数据。

mp.messaging.incoming.from.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer

这告知连接器在调用 receive () 方法前,使用 IntegerDeserializer 来反序列化主题中的值。您可以通过编写实现 org.apache.kafka.common.serialization.Deserializer 的类来实现自己的反序列化器,然后在部署中包含该类。

注意

这个属性列表并不全面。如需更多信息,请参阅 SmallRye Reactive Messaging Apache Kafka 文档。

强制 MicroProfile 主动消息传递前缀

MicroProfile Reactive 消息传递规范需要 Kafka 的以下方法属性密钥前缀:

  • mp.messaging.incoming.[channel-name].[attribute]=[value]`
  • mp.messaging.outgoing.[channel-name].[attribute]=[value]`
  • mp.messaging.connector.[connector-name].[attribute]=[value]`

请注意,channel-name@Incoming.value ()@Outgoing.value ()

现在考虑以下方法对示例:

@Outgoing("to")
public int send() {
    int i = // Randomly generated...
    return i;
}

@Incoming("from")
public void receive(int i) {
    // Process payload
}
Copy to Clipboard Toggle word wrap

在这个方法对示例中,请注意以下所需属性前缀:

  • mp.messaging.incoming.from.此前缀选择属性作为 receive () 方法的配置。
  • mp.messaging.outgoing.to.此前缀选择属性作为 send () 方法的配置。

要使用自签名证书配置 Apache Kafka 连接器客户端,请在 microprofile-config.properties 文件中定义 client-ssl-context。您可以在连接器和频道级别进行此操作。

以下示例演示了如何配置使用 SSL/TLS 保护的 Apache Kafka 连接器。

连接器级别 client-ssl-context 定义示例

mp.messaging.incoming.from.security.protocol=SSL
mp.messaging.outgoing.to.security.protocol=SSL
mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context=exampleSSLContext
Copy to Clipboard Toggle word wrap

只有在使用自签名证书时,才需要属性 mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context

重要

不要在生产环境中使用自签名证书。只使用证书颁发机构(CA)签名的证书。

您可以为频道指定 client-ssl-context,如下所示:

频道级 client-ssl-context 定义示例

mp.messaging.incoming.from.wildfly.elytron.ssl.context=exampleSSLContext
Copy to Clipboard Toggle word wrap

在示例中,exampleSSLContext 仅与来自 的传入频道关联。

Expand
表 14.7. 条目的讨论
entry描述

mp.messaging.incoming.from.security.protocol=SSL

这指定了在连接到代理时要使用安全的传入频道连接。

mp.messaging.outgoing.to.security.protocol=SSL

这指定在连接到代理时要使用安全的传出频道连接。

mp.messaging.connector.smallrye-kafka.wildfly.elytron.ssl.context

如果 Kafka 代理使用证书颁发机构(CA)签名证书保护,则不需要指定此属性。

如果您使用自签名证书,请在管理模型的 /subsystem=elytron/client-ssl-context 444 下指定 Elytron 子系统中定义的 SSLContext

重要

不要在生产环境中使用自签名证书。只使用证书颁发机构(CA)签名的证书。

您可以使用以下管理 CLI 命令定义 client-ssl-context

Example

/subsystem=elytron/client-ssl-context=exampleSSLContext:add(key-manager=exampleServerKeyManager,trust-manager=exampleTLSTrustManager)
Copy to Clipboard Toggle word wrap

注意

当 SSL/TLS 连接与 SCRAM-SHA-512 身份验证一起使用时,SSL/TLS 协议提供加密,但不用于身份验证。要使用 SCRAM-SHA-512 协议验证连接,请参阅 配置 MicroProfile Reactive Messagaging Kafka 连接器以使用 SASL_PLAINTEXTSASL_SSL 身份验证协议

Apache Kafka 使用 简单身份验证和安全层 (SASL)协议来验证连接到 Apache Kafka 侦听器 的客户端。您可以将 监听程序 配置为使用未加密的 普通 类型和加密的 tls 类型通信。Apache Kafka 的流将 SASL 与 Salted Challenged Response Authentication Mechanism (SCRAM)协议(SASL SCRAM-SHA-512)相结合来提供身份验证。您必须定义一个 Kafka 自定义资源和 KafkaUser 自定义资源 YAML 文件,以便为两种类型的监听程序配置身份验证。

如果在服务器上配置了 SASL,即 Kafka 侦听程序 配置为使用 SCRAM-SHA-512 身份验证,客户端必须指定安全协议。如果连接到使用 TLS 加密 的监听程序,此协议应为 SASL_SSL。如果没有加密 侦听器,则协议应为 SASL_PLAINTEXT。客户端配置必须通过将其设置为使用 SCRAM-SHA-512 来指定 SASL 机制。

注意

当 SCRAM-SHA-512 身份验证与 SSL/TLS 连接一起使用时,SSL/TLS 协议提供加密,但不用于身份验证。要保护与 SSL/TLS 的连接,请参阅配置安全 MicroProfile 被动消息 Apache Kafka 连接器

使用普通 类型未加密的通信和 SASL SCRAM-SHA-512 身份验证 的监听程序 设置客户端身份验证。

先决条件

  • 已安装 Apache Kafka 集群 Operator 的流。

    注意

    集群操作器默认生成 Secret 资源。客户端配置中 的用户名和密码 必须与 Secret 资源定义的用户名和密码匹配

    有关创建自定义 Secret 资源的更多信息,请参阅自定义密码配置

    如需有关操作器生成的 Secret 资源的更多信息,请参阅 Operator 生成的 Secret

流程

  1. Kafka 自定义资源定义为 YAML 文件:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: myproject
    spec:
      kafka:
        # ...
        listeners:
          - name: plain
            port: 9092
            type: internal
            tls: true
            authentication:
              type: scram-sha-512
    Copy to Clipboard Toggle word wrap
  2. 将您的 KafkaUser 自定义资源定义为 YAML 文件:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaUser
    metadata:
      name: my-user
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      authentication:
        type: scram-sha-512
    Copy to Clipboard Toggle word wrap

    KafkaUser .authentication 定义应与 监听器 .authentication 定义匹配。

  3. microprofile-config.properties 文件中配置您的客户端:

    # General config to set up SASL over PLAINTEXT
    mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092
    mp.messaging.connector.smallrye-kafka.sasl.mechanism=SCRAM-SHA-512
    mp.messaging.connector.smallrye-kafka.security.protocol=SASL_PLAINTEXT
    mp.messaging.connector.smallrye-kafka.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
      username="my-user" \
      password="my-password";
    Copy to Clipboard Toggle word wrap
    注意

    用户名和密码 必须与集群操作器生成的 Secret 资源中的用户名和密码匹配。

这是高级消息队列协议(AMQP)连接器的简单 microprofile-config.properties 文件示例。其属性与 MicroProfile 被动消息传递连接器中的示例中的属性对应,用于与外部消息传递系统集成

amqp-host=localhost
amqp-port=5672
amqp-username=artemis
amqp-password=artemis

mp.messaging.outgoing.to.connector=smallrye-amqp
mp.messaging.outgoing.to.address=my-topic

mp.messaging.incoming.from.connector=smallrye-amqp
mp.messaging.incoming.from.address=my-topic
Copy to Clipboard Toggle word wrap
Expand
表 14.8. 条目的讨论
entry描述

这些是"频道"。

发送,receive

这些是"方法"。

请注意, 频道位于 send () 方法,而 from 频道则位于 receive () 方法。

amqp-host=localhost

这将指定应用程序必须连接到的 AMQP 代理的 URL。您还可以在频道级别指定一个 URL,如下所示: mp.messaging.outgoing.to.host=localhost。如果没有指定 URL,值默认为 localhost

amqp-port=5672

这将指定 AMQP 代理的端口。

mp.messaging.outgoing.to.connector=smallrye-amqp

这表示您希望频道将消息发送到 AMQP。

小型被动消息传递是用于构建应用程序的框架。请注意,smallrye-amqp 值是特定于 SmallRye reactive 消息传递。如果您使用 Galleon 调配自己的服务器,您可以通过包含 microprofile-reactive-messaging-amqp Galleon 层来启用 AMQP 集成。

mp.messaging.outgoing.to.address=my-topic

这表示您要将数据发送到地址 my-topic 上的 AMQP 队列。如果您没有为 mp.messaging.outgoing.to.address 指定值,则该值将默认为频道,本例中为 "to"。

mp.messaging.incoming.from.connector=smallrye-amqp

这表示您要使用 from 频道来接收来自 AMQP 代理的消息。同样,smallrye-amqp 值是特定于 SmallRye reactive 消息传递。

mp.messaging.incoming.from.address=my-topic

这表示 您要从 频道上的 AMQP 队列 my-topic 中读取数据。

有关 SmallRye Reactive Messaging 的 AMQP 连接器支持的属性的完整列表,请参阅 SmallRye Reactive Messaging AMQP Connector Configuration Reference

连接到安全 AMQP 代理

要与通过 SSL/TLS 和简单身份验证和安全层(SASL)保护的 AMQ 代理连接,请在 microprofile-config.properties 文件中定义用于连接的 client-ssl-context。您可以在连接器级别以及频道级别进行此操作。

连接器级别 client-ssl-context 定义示例

amqp-use-ssl=true
mp.messaging.connector.smallrye-amqp.wildfly.elytron.ssl.context=exampleSSLContext
Copy to Clipboard Toggle word wrap

只有在使用自签名证书时,才需要属性 mp.messaging.connector.smallrye-amqp.wildfly.elytron.ssl.context

重要

不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。

您还可以为频道指定 client-ssl-context,如下所示:

频道级 client-ssl-context 定义示例

mp.messaging.incoming.from.wildfly.elytron.ssl.context=exampleSSLContext
Copy to Clipboard Toggle word wrap

在示例中,exampleSSLContext 仅与来自 的传入频道关联。

Expand
表 14.9. 条目的讨论
entry描述

amqp-use-ssl

这指定了我们在连接到代理时使用安全连接。

mp.messaging.connector.smallrye-amqp.wildfly.elytron.ssl.context

如果 AMQ 代理使用证书颁发机构(CA)签名证书进行保护,则不需要指定此属性。

如果您使用自签名证书,请在管理模型的 /subsystem=elytron/client-ssl-context 444 下指定 Elytron 子系统中定义的 SSLContext

重要

不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。

您可以使用以下管理 CLI 命令定义 client-ssl-context

/subsystem=elytron/client-ssl-context=exampleSSLContext:add(key-manager=exampleServerKeyManager,trust-manager=exampleTLSTrustManager)
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅为 客户端证书配置信任存储和信任管理器JBoss EAP 中配置 SSL/TLS 指南中的为双向 SSL/TLS 配置 服务器证书

14.6. OpenTelemetry 参考

14.6.1. OpenTelemetry 子系统属性

您可以修改 opentelemetry 子系统属性来配置其行为。属性按它们配置的不同方面分组: exporter、sampler 和 span 处理器。

Expand
表 14.10. 导出器属性组
属性描述默认值

端点

OpenTelemetry 推送 trace 的 URL。把它设置为您的 exporter 侦听的 URL。

http://localhost:14250/

exporter-type

将 trace 发送到的导出器。它可以是以下之一:

  • Jaeger.您使用的 exporter 是 Jaeger。
  • OTLP.您使用的导出器可用于 OpenTelemetry 协议。

jaeger

Expand
表 14.11. sampler 属性组
属性描述默认值

比率

要导出的 trace 的比率。该值必须在 0.01.0 之间。例如,要在由应用程序创建的每 100 个 trace 中导出一个 trace,请将值设为 0.01。只有在将属性 sampler-type 设置为 ratio 时,此属性才会生效。

 

Expand
表 14.12. span 处理器属性组
属性描述默认值

batch-delay

JBoss EAP 连续两个导出间隔(毫秒)。只有在将属性 span-processor-type 设置为 batch 时,此属性才会生效。

5000

export-timeout

在取消前允许导出完成的最大时间(毫秒)。

30000

max-export-batch-size

每个批处理中发布的 trace 的最大数量。这个数字应该较低或等于 max-queue-size 的值。只有在将属性 span-processor-type 设置为 batch 时,才能设置此属性。

512

max-queue-size

导出前到队列的最大 trace 数量。如果应用程序创建更多 trace,则不会记录它们。只有在将属性 span-processor-type 设置为 batch 时,此属性才会生效。

2048

span-processor-type

要使用的范围处理器的类型。该值可以是以下之一:

  • 批处理 :JBoss EAP 在使用以下属性定义的批处理中导出 trace:

    • batch-delay
    • max-export-batch-size
    • max-queue-size
  • 简单 :JBoss EAP 在完成后就立即导出 trace。

batch

法律通告

Copyright © 2025 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部