将 Azure Redis 用作 WebSphere Liberty 或 Open Liberty 的会话缓存

本文介绍如何使用 Azure Redis 作为 WebSphere Liberty 或 Open Liberty 的 HTTP 会话缓存。

在本指南中,你将:

  • 创建 Azure 托管 Redis 实例作为会话缓存。
  • 制作一个示例应用程序,实现 HTTP 会话的持久化。
  • 在本地运行示例应用程序。

本文旨在帮助你快速进行部署。 在进入生产环境之前,应探索 Tuning Liberty

如果你有兴趣提供反馈或与开发 WebSphere on Azure 解决方案的工程团队就迁移方案展开密切合作,请填写这份简短的有关 WebSphere 迁移的调查并提供联系人信息。 项目经理、架构师和工程师团队会及时与你联系,以开展密切合作。

先决条件

  • Azure 订阅。 如果还没有 Azure 订阅,可以在开始前创建一个免费帐户
  • 准备一台安装了类似于 Unix 的操作系统(例如 Ubuntu、macOS 或适用于 Linux 的 Windows 子系统)的本地计算机。
  • 安装 Java Standard Edition (SE) 实现版本 17 或更高版本 - 例如 Microsoft 构建的 OpenJDK
  • 安装 Maven 3.9.8 或更高版本。
  • 确保已安装 Git

创建 Azure 托管 Redis 实例

Azure 托管 Redis 基于 Redis Enterprise 软件提供内存中数据存储。 使用以下步骤创建 Azure 托管 Redis 实例,并记下其连接信息。 稍后将使用此信息来配置示例应用程序。

  1. 按照快速入门中的步骤创建 Azure 托管 Redis 实例:创建 Azure 托管 Redis 实例。 请仔细注意以下差异:

    1. 在“ 创建 Redis 实例”部分的步骤 3 中,在“ 基本信息 ”选项卡上,选择支持 Azure 托管 Redis 的 缓存 SKU 。 对于本指南,请选择“均衡”(对于具有典型性能要求的常规用途工作负荷)。 有关详细信息,请参阅 选择正确的层

    2. 在“ 创建 Redis 实例”部分的步骤 4 中,在“ 网络 ”选项卡上,选择“ 连接 ”选项,选择 “公共终结点”。 在使用本指南时,此选项是出于简单性的最佳选择。 对于生产环境,应考虑使用 专用终结点 来提高安全性。

    3. 在“ 创建 Redis 实例”部分的步骤 5 中,在“ 高级 ”选项卡上,配置以下设置:

      • 对于 身份验证,请启用 访问密钥身份验证。 使用本指南时,此选项是出于简化而最佳的选择。 为了获得最佳安全性,我们建议将 Microsoft Entra ID 与托管标识一起使用,以授权针对缓存的请求(如果可能)。 使用 Microsoft Entra ID 和托管标识进行授权可提供优于共享访问密钥授权的安全性和易用性。 有关将托管标识用于缓存的详细信息,请参阅 使用 Microsoft Entra ID 进行缓存身份验证

      • 为非聚集缓存将 群集策略 设置为 Enterprise ,该策略适用于使用单节点配置的本指南。 有关详细信息,请参阅 在 Enterprise 平台上的集群

  2. 部署完成后,如果位于“部署”页上,请选择“转到资源”。 否则,请导航到 Azure 门户,找到并选择 Azure 托管 Redis 实例。

  3. “概述 ”页上,记下 终结点 值。 稍后在环境变量中使用 REDIS_CACHE_ADDRESS 此值。

  4. 选择 “设置>身份验证”。 选择 “访问密钥 ”并记下 “主要 ”值。 稍后将此值用作 REDIS_CACHE_KEY 环境变量。

  5. 使用以下命令导出环境变量 REDIS_CACHE_ADDRESSREDIS_CACHE_KEY

    export REDIS_CACHE_ADDRESS=rediss://<your-redis-cache-endpoint>
    export REDIS_CACHE_KEY=<your-primary-access-key>
    

准备示例应用程序

WebSphere Liberty 和 Open Liberty 提供会话缓存功能,可用于在外部缓存中存储 HTTP 会话数据。 本指南使用 JCache 会话持久性 功能将会话数据存储在 Azure 托管 Redis 实例中。

使用以下命令克隆本指南的示例代码。 此示例位于 GitHub 上的 open-liberty-on-aks 存储库中。 存储库中有一些示例。 本文使用 java-app-jcache

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20250228
cd java-app-jcache

如果看到关于处于 detached HEAD 状态的消息,可以忽略该消息。 这只标识你签出了一个标签。

应用程序具有以下文件结构:

java-app-jcache/
├── pom.xml
├── pom-redisson.xml
└── src
    └── main
        ├── docker
        │   ├── Dockerfile
        │   └── Dockerfile-wlp
        ├── java
        ├── liberty
        │   └── config
        │       └── server.xml
        ├── redisson
        │   └── redisson-config.yaml
        ├── resources
        └── webapp

pom.xml 文件是包含示例应用程序的依赖项和插件的 Maven 项目文件。

pom-redisson.xml 文件用于稍后将 Re比森客户端库的依赖项复制到 Liberty 服务器的共享资源目录。

目录 javaresourceswebapp 包含示例应用程序的源代码。

liberty/config 目录中, server.xml 文件用于配置 Open Liberty 和 WebSphere Liberty 的 HTTP 会话缓存。

redisson 目录中,redisson-config.yaml 文件用于配置与 Azure 管理的 Redis 实例的连接。

Docker 目录包含两个 Dockerfiles。 Dockerfile 用于使用 Open Liberty 生成映像, Dockerfile-wlp 用于使用 WebSphere Liberty 生成映像。

在本地运行示例应用程序

使用以下步骤在本地生成和运行示例应用程序。 这些步骤使用 Maven 和 liberty-maven-plugin. 有关详细信息 liberty-maven-plugin,请参阅 使用 Maven 生成 Web 应用程序

  1. 验证本地克隆中的当前工作目录是否为 java-app-jcache

  2. 运行 Maven 命令 mvn clean package 并打包应用程序。

  3. 运行 mvn -Predisson validate 以将 Redisson 配置文件复制到正确的目标位置。 此步骤还会将环境变量REDIS_CACHE_ADDRESSREDIS_CACHE_KEY的值插入redisson-config.yaml文件中,该文件由server.xml文件引用。

  4. 运行 mvn dependency:copy-dependencies -f pom-redisson.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources 以将 Redisson 客户端库及其依赖项复制到 Liberty 服务器的共享资源目录。

  5. 运行 Maven 命令 mvn liberty:dev 并启动应用程序。 如果应用程序已成功启动,则应在命令输出中看到The defaultServer server is ready to run a smarter planet.

    如果 Redis 连接成功,应会看到类似于以下内容的输出。

    [INFO] [err] [Default Executor-thread-3] INFO org.redisson.Version - Redisson 3.23.4
    [INFO] [err] [redisson-netty-2-7] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.<region>.redis.azure.net/<ip_address>:10000
    [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.<region>.redis.azure.net/<ip_address>:10000
    

测试应用程序

打开 Web 浏览器进入 http://localhost:9080 ,您就会看到应用程序的主页。

成功运行的 Java 自由应用程序的屏幕截图。

“新建咖啡”窗体中,设置字段“名称和价格”的值,然后选择“提交”。 应用程序会创建新的咖啡,保留该咖啡,并将 HTTP 会话存储在 Azure 托管 Redis 实例中。

几秒钟后,你会看到“ 我们的咖啡”表中显示的新咖啡。

示例应用程序的屏幕截图,其中显示了在应用程序的会话中创建并持久化的新咖啡。

若要演示可以从 Redis 检索会话数据,请使用 Ctrl+C 停止应用程序并使用命令重启它 mvn liberty:dev

然后,刷新应用程序主页。 您应该能看到在“ 新的咖啡”部分中显示的相同会话数据。 完成测试后停止应用程序。

容器化应用程序

(可选)可以使用以下步骤在容器中打包和运行应用程序。 示例应用程序提供了两个 Dockerfile 文件,分别用于 Open Liberty 和 WebSphere Liberty。 本指南使用适用于 Open Liberty 的 Dockerfile,但可以按照类似的步骤使用适用于 WebSphere Liberty 的 Dockerfile。

  1. 安装适用于 OS 的 Docker。 有关详细信息,请参阅 “获取 Docker”。

  2. 使用以下命令生成 Docker 映像:

    docker build -t javaee-cafe-jcache:v1 -f src/main/docker/Dockerfile .
    
  3. 使用以下命令启动 Docker 容器:

    docker run -it --rm \
       -p 9080:9080 \
       -e REDIS_CACHE_ADDRESS=${REDIS_CACHE_ADDRESS} \
       -e REDIS_CACHE_KEY=${REDIS_CACHE_KEY} \
       --mount type=bind,source=$(pwd)/target/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml,target=/config/redisson-config.yaml \
       javaee-cafe-jcache:v1
    

    容器启动后,可以使用与在不使用 Docker 的情况下在本地运行应用程序的步骤类似的步骤对其进行测试。

清理资源

若要避免 Azure 费用,应清除不需要的资源。 不再需要 Azure 托管 Redis 实例时,请查找其资源组名称,并从 Azure 门户将其删除。

有关详细信息,请参阅 “删除资源组”。

后续步骤

可以从本指南中使用的参考资料中了解到更多信息:

如果要将示例应用程序部署到 Azure,请参阅以下文章:

要了解在 Azure 上运行 WebSphere 产品的选项,请参阅在 Azure 上运行 WebSphere 系列产品的解决方案有哪些?