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