Cloud Foundry Deployment
If you have configured and built the sample stream applications to run with one of the supported message brokers, You can run them as stand-alone applications on a Cloud Foundry installation.
This section walks you through how to deploy the three Spring Cloud Stream applications on Cloud Foundry.
As of this writing, Kafka must be managed as an external service which is accessible to your Cloud Foundry environment.
Create deployment manifests
Create a CF manifest for each application, configured to connect to the external Kafka broker.
Create a CF manifest YAML file called usage-detail-sender.yml for the UsageDetailSender:
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]Create a CF manifest YAML file called usage-cost-processor.yml for the UsageCostProcessor:
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]Create a CF manifest YAML file called usage-cost-logger.yml for the UsageCostLogger:
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]Create a RabbitMQ service
From the CF market place, create a RabbitMQ service instance, named rabbitmq from one of the available RabbitMQ service plans. For example, for a service plan p.rabbitmq single-node, use:
cf create-service p.rabbitmq single-node rabbitmqCreate deployment manifests
Create a CF manifest for each application, configured to bind to the rabbitmq service.
Create a CF manifest YAML file named usage-detail-sender.yml for the UsageDetailSender:
applications:
- name: usage-detail-sender
timeout: 120
path: ./target/usage-detail-sender-rabbit-0.0.1-SNAPSHOT.jar
memory: 1G
buildpack: java_buildpack
services:
- rabbitmqCreate a CF manifest YAML file named usage-cost-processor.yml for the UsageCostProcessor:
applications:
- name: usage-cost-processor
timeout: 120
path: ./target/usage-cost-processor-0.0.1-SNAPSHOT.jar
memory: 1G
buildpack: java_buildpack
services:
- rabbitmqCreate a CF manifest YAML file named usage-cost-logger.yml:
applications:
- name: usage-cost-logger
timeout: 120
path: ./target/usage-cost-logger-0.0.1-SNAPSHOT.jar
memory: 1G
buildpack: java_buildpack
services:
- rabbitmqPush the UsageDetailSender application by using its manifest, as follows:
cf push -f usage-detail-sender.ymlPush the UsageCostProcessor application by using its manifest, as follows:
cf push -f usage-cost-processor.ymlPush the UsageCostLogger application by using its manifest, as follows:
cf push -f usage-cost-logger.ymlYou can see the applications by running the cf apps command, as the following example (with output) shows:
cf appsname 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.ioTo verify the deployment, tail the logs on the usage-cost-logger application.
cf logs usage-cost-loggerYou should see something like this:
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" }Clean Up
Delete the application instances:
cf d -f usage-detail-sender
cf d -f usage-cost-processor
cf d -f usage-cost-loggerIf using RabbitMQ, you may delete the service instance:
cf ds -f rabbitmq