Spring Cloud 应用代理简介

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

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

第一个项目是Spring Cloud 开放服务代理。该项目已经可用了一段时间;但是,最近的3.0.0 版本本身也进行了重新设计,以合并响应式编程模型并更新以支持 Spring WebFlux。

第二个项目(今天推出)是Spring Cloud 应用代理。Spring Cloud 应用代理代表了 Spring Cloud Services 中底层架构的重要部分的抽象,我们很高兴地宣布 Spring Cloud 应用代理 1.0.1 现已可用。

背景

开放服务代理 API项目允许开发人员向在 Cloud Foundry、Kubernetes 和 OpenShift 等云原生平台上运行的应用程序交付服务。迄今为止,构建基于 Spring Boot 的服务代理应用程序的唯一选择是将Spring Cloud 开放服务代理启动器添加到您的项目中,包含所需的配置,并实现所需的接口。Spring Cloud 开放服务代理对服务代理实现的意见较少,并将许多此类决策留给开发人员,要求开发人员自己实现所有服务代理应用程序逻辑。

简介

Spring Cloud 应用代理也是一个用于构建实现开放服务代理 API 的 Spring Boot 应用程序的框架。它提供了一个基于 Spring Boot 的框架,使开发人员能够快速创建一个服务代理,该代理在管理服务被供应时将应用程序和服务部署到平台。它建立在 Spring Cloud 开放服务代理的基础上,通过提供 Spring Cloud 开放服务代理接口的意见性实现。

从实践的角度来看这意味着什么?假设由服务代理部署的管理服务依赖于其他服务或应用程序。利用应用代理配置属性,可以声明这些服务和应用程序并定义依赖关系。当服务代理收到请求以供应新的服务实例时,应用代理将管理相关应用程序和服务的部署或供应,并在适当的地方绑定这些服务和应用程序。相反,当收到请求删除服务实例时,应用代理将取消绑定并删除之前供应的任何相关服务和应用程序。

入门

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

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 属性文件提供(例如,您可以在 application.yml 文件中提供配置)。由于 Spring Cloud 应用代理构建在 Spring Cloud 开放服务代理之上,因此您必须提供 Spring Cloud 开放服务代理配置才能使用 Spring Cloud 应用代理。

使用 spring.cloud.openservicebroker 下的属性包含 Spring Cloud 开放服务代理配置,如下例所示

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 应用代理配置,如下例所示

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 数据库。应用代理将创建任何配置的服务并将其绑定到关联的应用程序。使用部署应用程序的 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 应用代理还提供了进一步自定义供应服务实例过程的方法。例如,应用代理可以通过使用自定义凭据提供程序生成并分配每个后端应用程序部署的唯一凭据

还提供了用于创建更新删除服务实例以及用于创建删除服务实例绑定的各种阶段的工作流。例如,可以在应用程序中将CreateServiceInstanceWorkflow实现并配置为 Spring Bean,以将其他功能挂接到创建服务实例的请求中。这可能仅仅是处理特定的日志记录需求。

结论

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

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

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

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部