Cloud Foundry 部署

如果您已配置并构建示例流应用程序以使用某个受支持的消息代理运行,则可以在 Cloud Foundry 安装上将它们作为独立应用程序运行。

本节将指导您如何在 Cloud Foundry 上部署三个 Spring Cloud Stream 应用程序。

在撰写本文时,Kafka 必须作为外部服务进行管理,并且您的 Cloud Foundry 环境可以访问该服务。

创建部署清单

为每个应用程序创建一个 CF 清单,配置为连接到外部 Kafka 代理。

UsageDetailSender 创建一个名为 usage-detail-sender.yml 的 CF 清单 YAML 文件

applications:
- name: usage-detail-sender
  timeout: 120
  path: ./target/usage-detail-sender-0.0.1-SNAPSHOT.jar
  memory: 1G
  buildpack: java_buildpack
  env:
    SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS: [Kafka_Service_IP_Address:Kafka_Service_Port]
    SPRING_CLOUD_STREAM_KAFKA_BINDER_ZKNODES: [ZooKeeper_Service_IP_Address:ZooKeeper_Service_Port]

UsageCostProcessor 创建一个名为 usage-cost-processor.yml 的 CF 清单 YAML 文件

applications:
- name: usage-cost-processor
  timeout: 120
  path: ./target/usage-cost-processor-0.0.1-SNAPSHOT.jar
  memory: 1G
  buildpack: java_buildpack
  env:
    SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS: [Kafka_Service_IP_Address:Kafka_Service_Port]
    SPRING_CLOUD_STREAM_KAFKA_BINDER_ZKNODES: [ZooKeeper_Service_IP_Address:ZooKeeper_Service_Port]

UsageCostLogger 创建一个名为 usage-cost-logger.yml 的 CF 清单 YAML 文件

applications:
- name: usage-cost-logger
  timeout: 120
  path: ./target/usage-cost-logger-0.0.1-SNAPSHOT.jar
  memory: 1G
  buildpack: java_buildpack
  env:
    SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS: [Kafka_Service_IP_Address:Kafka_Service_Port]
    SPRING_CLOUD_STREAM_KAFKA_BINDER_ZKNODES: [ZooKeeper_Service_IP_Address:ZooKeeper_Service_Port]

创建 RabbitMQ 服务

从 CF 市场中,从可用的 RabbitMQ 服务计划中创建一个名为 rabbitmq 的 RabbitMQ 服务实例。例如,对于服务计划 p.rabbitmq single-node,使用

cf create-service p.rabbitmq single-node rabbitmq

创建部署清单

为每个应用程序创建一个 CF 清单,配置为绑定到 rabbitmq 服务。

UsageDetailSender 创建一个名为 usage-detail-sender.yml 的 CF 清单 YAML 文件

applications:
- name: usage-detail-sender
  timeout: 120
  path: ./target/usage-detail-sender-rabbit-0.0.1-SNAPSHOT.jar
  memory: 1G
  buildpack: java_buildpack
  services:
    - rabbitmq

UsageCostProcessor 创建一个名为 usage-cost-processor.yml 的 CF 清单 YAML 文件

applications:
- name: usage-cost-processor
  timeout: 120
  path: ./target/usage-cost-processor-0.0.1-SNAPSHOT.jar
  memory: 1G
  buildpack: java_buildpack
  services:
    - rabbitmq

创建一个名为 usage-cost-logger.yml 的 CF 清单 YAML 文件

applications:
- name: usage-cost-logger
  timeout: 120
  path: ./target/usage-cost-logger-0.0.1-SNAPSHOT.jar
  memory: 1G
  buildpack: java_buildpack
  services:
    - rabbitmq

使用其清单推送 UsageDetailSender 应用程序,如下所示

cf push -f usage-detail-sender.yml

使用其清单推送 UsageCostProcessor 应用程序,如下所示

cf push -f usage-cost-processor.yml

使用其清单推送 UsageCostLogger 应用程序,如下所示

cf push -f usage-cost-logger.yml

您可以通过运行 cf apps 命令查看应用程序,如下例(带输出)所示

cf apps
name                   requested state   instances   memory   disk   urls
usage-cost-logger      started           1/1         1G       1G     usage-cost-logger.cfapps.io
usage-cost-processor   started           1/1         1G       1G     usage-cost-processor.cfapps.io
usage-detail-sender    started           1/1         1G       1G     usage-detail-sender.cfapps.io

要验证部署,请在 usage-cost-logger 应用程序上跟踪日志。

cf logs usage-cost-logger

您应该会看到如下内容

   2019-05-13T23:23:33.36+0530 [APP/PROC/WEB/0] OUT 2019-05-13 17:53:33.362  INFO 15 --- [e-cost.logger-1] i.s.d.s.u.UsageCostLogger     : {"userId": "user5", "callCost": "1.0", "dataCost": "12.350000000000001" }
   2019-05-13T23:23:33.46+0530 [APP/PROC/WEB/0] OUT 2019-05-13 17:53:33.467  INFO 15 --- [e-cost.logger-1] i.s.d.s.u.UsageCostLogger     : {"userId": "user1", "callCost": "19.0", "dataCost": "10.0" }
   2019-05-13T23:23:34.46+0530 [APP/PROC/WEB/0] OUT 2019-05-13 17:53:34.466  INFO 15 --- [e-cost.logger-1] i.s.d.s.u.UsageCostLogger     : {"userId": "user4", "callCost": "2.2", "dataCost": "5.15" }
   2019-05-13T23:23:35.46+0530 [APP/PROC/WEB/0] OUT 2019-05-13 17:53:35.469  INFO 15 --- [e-cost.logger-1] i.s.d.s.u.UsageCostLogger     : {"userId": "user3", "callCost": "21.0", "dataCost": "17.3" }

清理

删除应用程序实例。

cf d -f usage-detail-sender
cf d -f usage-cost-processor
cf d -f usage-cost-logger

如果使用 RabbitMQ,则可以删除服务实例。

cf ds -f rabbitmq