你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:在 Azure 容器应用中使用托管 Java 组件启动第一个 Java 微服务应用程序

本快速入门介绍如何在 Azure 容器应用中部署应用程序,该应用程序使用 Java 组件来处理配置管理、服务发现以及运行状况和指标。 此示例中使用的示例应用程序为 Java PetClinic,其使用微服务体系结构模式。 下图描述了 Azure 容器应用上的 PetClinic 应用程序的体系结构:

Java 组件与微服务应用程序之间的关系图。

PetClinic 应用程序包括以下功能:

  • 前端是 API 网关应用上托管的独立 Node.js Web 应用。
  • API 网关将请求路由到后端服务应用。
  • 后端应用是使用 Spring Boot 构建的。
  • 每个后端应用都使用 HyperSQL 数据库作为持久性存储。
  • 这些应用使用 Azure 容器应用上的托管 Java 组件,包括服务注册表、配置服务器和管理服务器。
  • 配置服务器从 Git 存储库读取数据。
  • Log Analytics 工作区记录服务器数据。

在本教程中,你将了解:

  • 创建配置服务器、Eureka 服务器、管理服务器和管理组件
  • 创建一系列微服务应用
  • 将服务器组件绑定到微服务应用
  • 部署应用的集合
  • 查看已部署的资源

本文结束时,你将部署一个 Web 应用程序和三个后端应用程序,这三个后端应用程序配置为使用三个不同的 Java 组件。 然后,可以通过 Azure 门户管理每个组件。

先决条件

  • Azure 帐户:如果没有 Azure 帐户,可以免费创建一个。 需要拥有 Azure 订阅的“参与者”或“所有者”权限才能使用本快速入门。 有关详细信息,请参阅使用 Azure 门户分配 Azure 角色
  • Azure CLI:安装 Azure CLI
  • Azure 容器应用 CLI 扩展。 使用版本 0.3.47 或更高版本。 使用 az extension add --name containerapp --upgrade --allow-preview 命令安装最新版本。

安装

若要创建环境变量、资源组和 Azure 容器应用环境,请使用以下步骤:

  1. 环境变量包含你的自定义值,因此在运行以下命令之前,请将括在 <> 内的占位符值替换为自己的值:

    export RESOURCE_GROUP=<RESOURCE_GROUP>
    export LOCATION=<LOCATION>
    export CONTAINER_APP_ENVIRONMENT=<CONTAINER_APPS_ENVIRONMENT>
    
  2. 现在,创建更多包含微服务应用设置的环境变量。 这些值用于定义部署微服务所使用的 Java 组件和 Azure 容器应用的名称及配置。 使用以下命令创建这些环境变量:

    export CONFIG_SERVER_COMPONENT=configserver
    export ADMIN_SERVER_COMPONENT=admin
    export EUREKA_SERVER_COMPONENT=eureka
    export CONFIG_SERVER_URI=https://github.com/spring-petclinic/spring-petclinic-microservices-config.git
    export CUSTOMERS_SERVICE=customers-service
    export VETS_SERVICE=vets-service
    export VISITS_SERVICE=visits-service
    export API_GATEWAY=api-gateway
    export CUSTOMERS_SERVICE_IMAGE=ghcr.io/azure-samples/javaaccelerator/spring-petclinic-customers-service
    export VETS_SERVICE_IMAGE=ghcr.io/azure-samples/javaaccelerator/spring-petclinic-vets-service
    export VISITS_SERVICE_IMAGE=ghcr.io/azure-samples/javaaccelerator/spring-petclinic-visits-service
    export API_GATEWAY_IMAGE=ghcr.io/azure-samples/javaaccelerator/spring-petclinic-api-gateway
    
  3. 使用以下命令登录到 Azure CLI 并选择活动订阅:

    az login
    
  4. 使用以下命令创建资源组来组织 Azure 服务:

    az group create \
        --name $RESOURCE_GROUP \
        --___location $LOCATION
    
  5. 使用以下命令创建 Azure 容器应用环境,以便托管 Java 组件和容器应用:

    az containerapp env create \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_ENVIRONMENT \
        --___location $LOCATION
    

创建 Java 组件

现在,创建为应用提供支持的以下 Java 组件:

  • 配置服务器。 用于管理微服务应用的配置设置。
  • Eureka 服务器。 用于管理服务注册表和发现。
  • 管理服务器。 用于监视和管理微服务应用的运行状况及指标。

若要创建这些服务器组件,请使用以下步骤:

  1. 使用以下命令为 Java 组件创建配置服务器:

    az containerapp env java-component config-server-for-spring create \
        --resource-group $RESOURCE_GROUP \
        --name $CONFIG_SERVER_COMPONENT \
        --environment $CONTAINER_APP_ENVIRONMENT \
        --configuration spring.cloud.config.server.git.uri=$CONFIG_SERVER_URI
    
  2. 使用以下命令为 Java 组件创建 Eureka 服务器:

    az containerapp env java-component eureka-server-for-spring create \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_SERVER_COMPONENT
        --environment $CONTAINER_APP_ENVIRONMENT \
    
  3. 使用以下命令为 Java 组件创建管理服务器:

    az containerapp env java-component admin-for-spring create \
        --resource-group $RESOURCE_GROUP \
        --name $ADMIN_SERVER_COMPONENT
        --environment $CONTAINER_APP_ENVIRONMENT \
    

部署微服务应用

若要使用预生成的容器映像将 Java 微服务应用部署到 Azure 容器应用,请执行以下步骤:

注意

在本文中,你对 Spring Petclinic 微服务应用使用一系列生成的映像。 也可以选择自定义示例代码并使用你自己的映像。 有关详细信息,请参阅 azure-container-apps-java-samples GitHub 存储库

  1. 使用以下命令创建客户数据应用:

    az containerapp create \
        --resource-group $RESOURCE_GROUP \
        --name $CUSTOMERS_SERVICE \
        --environment $CONTAINER_APP_ENVIRONMENT \
        --image $CUSTOMERS_SERVICE_IMAGE
    
  2. 使用以下命令创建兽医应用:

    az containerapp create \
        --resource-group $RESOURCE_GROUP \
        --name $VETS_SERVICE \
        --environment $CONTAINER_APP_ENVIRONMENT \
        --image $VETS_SERVICE_IMAGE
    
  3. 使用以下命令创建访问应用:

    az containerapp create \
        --resource-group $RESOURCE_GROUP \
        --name $VISITS_SERVICE \
        --environment $CONTAINER_APP_ENVIRONMENT \
        --image $VISITS_SERVICE_IMAGE
    
  4. 使用以下命令创建 API 网关应用:

    az containerapp create \
        --resource-group $RESOURCE_GROUP \
        --name $API_GATEWAY \
        --environment $CONTAINER_APP_ENVIRONMENT \
        --image $API_GATEWAY_IMAGE \
        --ingress external \
        --target-port 8080 \
        --query properties.configuration.ingress.fqdn 
    

将容器应用绑定到 Java 组件

接下来,将 Java 组件绑定到容器应用。 本部分所创建的绑定提供以下功能:

  • 启动时,将配置数据从托管配置服务器注入每个应用中。
  • 向托管 Eureka 服务器注册应用,以便发现服务。
  • 启用管理服务器以监视应用。

使用 containerapp update 命令通过以下步骤为每个应用创建绑定:

  1. 使用以下命令将绑定添加到客户数据应用:

    az containerapp update \
        --resource-group $RESOURCE_GROUP \
        --name $CUSTOMERS_SERVICE \
        --bind $CONFIG_SERVER_COMPONENT $EUREKA_SERVER_COMPONENT $ADMIN_SERVER_COMPONENT
    
  2. 使用以下命令将绑定添加到兽医服务:

    az containerapp update \
        --resource-group $RESOURCE_GROUP \
        --name $VETS_SERVICE \
        --bind $CONFIG_SERVER_COMPONENT $EUREKA_SERVER_COMPONENT $ADMIN_SERVER_COMPONENT
    
  3. 使用以下命令将绑定添加到访问服务:

    az containerapp update \
        --resource-group $RESOURCE_GROUP \
        --name $VISITS_SERVICE \
        --bind $CONFIG_SERVER_COMPONENT $EUREKA_SERVER_COMPONENT $ADMIN_SERVER_COMPONENT
    
  4. 将绑定添加到 API 网关。 使用以下命令返回前端应用程序的 URL,然后在浏览器中打开此位置:

    az containerapp update \
        --resource-group $RESOURCE_GROUP \
        --name $API_GATEWAY \
        --bind $CONFIG_SERVER_COMPONENT $EUREKA_SERVER_COMPONENT $ADMIN_SERVER_COMPONENT \
        --query properties.configuration.ingress.fqdn 
    

验证应用状态

使用以下步骤验证应用状态:

  1. 使用 API 网关的 az containerapp update 命令所返回的 URL,在浏览器中查看前端应用程序。 该应用程序应与以下屏幕截图类似:

    Pet Clinic 应用程序主页的屏幕截图。

  2. 使用以下步骤查看 Eureka 服务器仪表板:

    重要

    要查看 Eureka 服务器仪表板和 Spring 管理仪表板,至少需要在托管环境资源上为你的帐户分配 Microsoft.App/managedEnvironments/write 角色。 可以在资源上显式分配 OwnerContributor 角色。 也可按照以下步骤创建自定义角色定义,并将其分配给你的帐户。

    1. 运行以下命令,返回仪表板 URL:

      az containerapp env java-component eureka-server-for-spring show \
          --resource-group $RESOURCE_GROUP \
          --name $EUREKA_SERVER_COMPONENT \
          --environment $CONTAINER_APP_ENVIRONMENT \
          --query properties.ingress.fqdn
      
    2. 在浏览器中打开 URL。 应会看到与以下屏幕截图类似的应用程序:

      Eureka 服务器 Pet Clinic 应用程序的屏幕截图。

  3. 使用以下步骤查看 Spring 管理仪表板:

    1. 使用以下命令返回仪表板 URL:

      az containerapp env java-component admin-for-spring show \
          --resource-group $RESOURCE_GROUP \
          --name $ADMIN_SERVER_COMPONENT \
          --environment $CONTAINER_APP_ENVIRONMENT \
          --query properties.ingress.fqdn
      
    2. 在浏览器中打开 URL。 应会看到与以下屏幕截图类似的应用程序:

      Pet Clinic 管理仪表板的屏幕截图,其中显示五个正常运行的服务,以及其中四个服务的版本信息。

可选:配置 Java 组件

可以使用“配置”部分,通过 Azure 门户配置在本快速入门中创建的 Java 组件

“配置”部分的屏幕截图,其中显示了“属性名称”和“值”文本框,以及删除属性的功能。

有关配置在本快速入门中创建的三个 Java 组件的详细信息,请参阅以下链接:

清理资源

本快速入门中创建的资源会影响 Azure 帐单。 如果不打算长期使用这些服务,请使用以下命令删除本快速入门中创建的所有内容:

az group delete --resource-group $RESOURCE_GROUP