引入 Spring Cloud App Broker

工程 | Roy Clarkson | 2019年5月30日 | ...

我们最近宣布 Spring Cloud Services 3.0 正式发布,该版本对该项目先前使用的架构进行了重大重新设计。正如相关博文所述,Spring Cloud Services 已迁移到最新版本的 Spring Framework 和 Spring Boot,现在基于响应式编程模型和 Spring WebFlux 构建。此次重新设计的两个关键组件作为开源 Spring Cloud 项目提供。

第一个项目是 Spring Cloud Open Service Broker。该项目已经存在一段时间了;然而,最近的 3.0.0 版本 本身也经过重新设计,以纳入响应式编程模型并更新以支持 Spring WebFlux。

第二个项目是今天发布的 Spring Cloud App Broker。Spring Cloud App Broker 抽象了 Spring Cloud Services 底层架构的重要部分,我们很高兴地宣布 Spring Cloud App Broker 1.0.1 现已可用。

背景

Open Service Broker API 项目允许开发者向运行在 Cloud Foundry、Kubernetes 和 OpenShift 等云原生平台中的应用程序提供服务。迄今为止,构建基于 Spring Boot 的服务代理应用程序的唯一选择是将 Spring Cloud Open Service Broker 启动器添加到你的项目,包含所需的配置,并实现所需的接口。Spring Cloud Open Service Broker 对于服务代理实现没有太多特定的意见,将许多决策留给开发者,要求开发者自行实现所有的服务代理应用程序逻辑。

简介

Spring Cloud App Broker 也是一个用于构建实现 Open Service Broker API 的 Spring Boot 应用程序的框架。它提供了一个基于 Spring Boot 的框架,使开发者能够快速创建一个服务代理,以便在预置托管服务时将应用程序和服务部署到平台。它在 Spring Cloud Open Service Broker 的基础上,提供了对 Spring Cloud Open Service Broker 接口的特定实现。

这在实际应用中意味着什么?想象一下,由服务代理部署的托管服务依赖于额外的服务或应用程序。利用 App Broker 的配置属性,可以声明这些服务和应用程序并定义其依赖关系。当服务代理收到预置新服务实例的请求时,App Broker 将管理依赖应用程序和服务的部署或预置,并在适当的时候绑定这些服务和应用程序。相反,当收到删除服务实例的请求时,App Broker 将解除绑定并删除所有先前预置的依赖服务和应用程序。

入门指南

创建一个 Spring Boot 应用程序,并在应用程序的构建文件中包含 Spring Cloud App Broker 依赖项。

Maven 依赖项

在应用程序的 pom.xml 文件中包含以下内容

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-app-broker-cloudfoundry</artifactId>
        <version>1.0.1.RELEASE</version>
    </dependency>
</dependencies>

Gradle 依赖项

在应用程序的 build.gradle 文件中包含以下内容

dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-app-broker-cloudfoundry:1.0.1.RELEASE'
}

配置服务代理

服务代理使用 Spring Boot 外部化配置进行配置,可以使用 YAML 或 Java Properties 文件提供(例如,你可以在 application.yml 文件中提供配置)。由于 Spring Cloud App Broker 构建在 Spring Cloud Open Service Broker 之上,因此你必须提供 Spring Cloud Open Service Broker 配置才能使用 Spring Cloud App Broker。

使用 spring.cloud.openservicebroker 下的属性包含 Spring Cloud Open Service Broker 配置,示例如下

spring:
  cloud:
    openservicebroker:
      catalog:
        services:
        - name: example
          id: ebca66fd-461d-415b-bba3-5e379d671c88
          description: A useful service
          bindable: true
          tags:
          - example
          plans:
          - name: standard
            id: e19e6bc3-37c1-4478-b70f-c7157ebbb28c
            description: A standard plan
            free: true

使用 spring.cloud.appbroker 下的属性包含 Spring Cloud App Broker 配置,示例如下

spring:
  cloud:
    appbroker:
      services:
        - service-name: example
          plan-name: standard
          apps:
            - name: example-service-app1
              path: classpath:app1.jar
            - name: example-service-app2
              path: classpath:app2.jar
      deployer:
        cloudfoundry:
          api-host: api.sys.example.com
          api-port: 443
          username: admin
          password: adminpass
          default-org: test
          default-space: development

服务实例

可以使用以下属性为由服务代理管理的一个或多个服务配置后台应用程序和依赖服务。

应用程序部署属性

可以为所有应用程序部署配置后台应用程序的默认属性,也可以单独配置每个服务的后台应用程序部署。有关可用属性的更完整列表,请参阅参考文档

spring:
  cloud:
    appbroker:
      deployer:
        cloudfoundry:
          properties:
            memory: 1G
            health-check: http
            health-check-http-endpoint: /health
            health-check-timeout: 180

在服务的配置中,使用 spring.cloud.appbroker.services.* 设置特定服务的覆盖值,示例如下

spring:
  cloud:
    appbroker:
      services:
        - service-name: example
          plan-name: standard
          apps:
            - name: example-service-app1
              path: classpath:app1.jar
              properties:
                memory: 2G
                count: 2
                no-route: true
服务配置

后台应用程序可能需要一个或多个依赖服务。例如,一个应用程序可能需要使用 MySQL 数据库。App Broker 将创建所有已配置的服务,并将它们绑定到关联的应用程序。服务的配置使用已部署应用程序的 services 下的属性,示例如下

spring:
  cloud:
    appbroker:
      services:
        - service-name: example
          plan-name: standard
          apps:
            - name: example-service-app1
              path: classpath:app1.jar
              services:
              - service-instance-name: example-db
                name: mysql
                plan: small
                parameters:
                  param-key: param-value

进一步定制

除了上述支持的配置之外,Spring Cloud App Broker 还提供了进一步定制服务实例预置过程的方法。例如,App Broker 可以通过使用定制的凭证提供程序为每个后台应用程序部署生成并分配唯一的凭证

还提供了用于服务实例创建更新删除不同阶段的工作流,以及用于服务实例绑定的创建删除。例如,可以在应用程序中实现和配置 CreateServiceInstanceWorkflow 作为 Spring Bean,以便将附加功能挂钩到创建服务实例的请求中。这可能很简单,例如处理特定的日志记录要求。

结论

构建功能完善的服务代理可能具有挑战性,但随着 Spring Cloud Open Service Broker 和 Spring Cloud App Broker 等项目的出现,我们希望减少样板代码的数量,使你能够更快地构建自己的服务代理。

获取 Spring 新闻通讯

订阅 Spring 新闻通讯,保持联系

订阅

领先一步

VMware 提供培训和认证,助你快速提升。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将到来的活动

查看 Spring 社区所有即将到来的活动。

查看全部