spring-cloud-stream:流部署在 spring-cloud-dataflow-server-cf 上失败
spring-cloud-stream: Stream deployments fail on spring-cloud-dataflow-server-cf
在我们的 use-case 中,我们需要创建一个 Message Stream 应用程序并将其部署到我们的私有 Cloud Foundry 环境。流应用程序旨在监听 RabbitMq queue 并触发任务,如流中定义的那样。
为了实现相同的目的,我们通过 运行 在 Mac 上本地使用 cloud-dataflow-server-cloudfoundry
。
下面是用于实现它的一组命令:-
- 设置Maven远程仓库
export MAVEN_REMOTE_REPOSITORIES_REPO1_URL=https://ftl.abc.com/NEXUS
设置 Cloud Foundry 目的地 -
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_URL=https://api.paas.abc-intl.com/
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_ORG=Paas-Apps
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SPACE=DEV
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_DOMAIN=paas.abc-intl.com
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_USERNAME=abc@xyz.com
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_PASSWORD=password
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SKIP_SSL_VALIDATION=true
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_SERVICES=rabbitmq_server
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_BUILDPACK=java_buildpack_offline
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_MEMORY=512
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_MEMORY=512
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_URL=https://api.paas.abc-intl.com/
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_ORG=Paas-Apps
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SPACE=DEV
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_DOMAIN=paas.abc-intl.com
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_USERNAME=abc@xyz.com
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_PASSWORD=password
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SKIP_SSL_VALIDATION=true
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_SERVICES=rabbitmq_server
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_BUILDPACK=java_buildpack_offline
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_MEMORY=512
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_MEMORY=512
启动数据流服务器-
使用 spring 云属性构建 Dataflow Server CF 为:
- spring.name=数据流
- spring.cloud.config.uri=http://localhost:8888
- spring.cloud.dataflow.features.tasksEnabled=真
- spring.cloud.dataflow.features.streamsEnabled=真
- spring.cloud.deployer.cloudfoundry.task.taskTimeout=360
在本地启动 DF Server CF - java -Djavax.net.ssl.trustStore=/Users/apache-maven-3.3.9/conf/keystore.jks -Djavax.net.ssl.trustStorePassword=password -jar spring-cloud-dataflow-server-cloudfoundry-1.1.0.BUILD-SNAPSHOT.jar
- 开始DFShell
- 导入启动器应用程序 -
stream-applications-rabbit-maven
- 注册应用程序 -
app register --name task-processor --type processor --uri maven://org.springframework.cloud.stream.app:tasklaunchrequest-transform-processor-rabbit:jar:1.1.0.BUILD-SNAPSHOT
app register --name task-launcher-local --type sink --uri maven://org.springframework.cloud.stream.app:task-launcher-local-sink-rabbit:jar:1.0.4.RELEASE
- 创建和部署流 -
stream create myMessageStream --definition "rabbit --rabbit.queues=cloud-stream-source --rabbit.requeue=true --spring.rabbitmq.host=host.abc.com --spring.rabbitmq.port=5672 --spring.cloud.stream.bindings.output.contentType='text/plain' | task-processor --uri=maven://com.example:thumbnail-generator:0.0.1-SNAPSHOT | task-launcher-local" --deploy
然而,部署失败并出现 TimeoutException,但在数据流服务器日志或应用程序日志中没有明确原因。
在cloud foundryspace中创建的应用程序在CF控制台上都显示Stopped。
这让我一头雾水,我有几个问题来了解可能的根本原因:
- 如果Stream部署成功,Stream部署到CF的应用应该是什么状态?这些显示为 started 还是 stopped?
- 已部署应用程序的名称中嵌入了几个随机词,例如dataflow-nonvaluable-overapprehension-myMessageStream-rabbit。据我了解,这是为 Dataflow Server 实例指定的名称,并被插入以进行引用。有没有办法自定义此名称?这将使我能够提前知道应用程序的名称,然后 运行 在他们的日志中找到尾巴。
任何 thoughts/help 将不胜感激。
In case of a successful Stream deployment, what shall be the status of applications deployed to CF by Stream? Do these show up as started or stopped?
stream list
命令将显示状态。如果流部署成功,状态应该是deployed
.
The name of the deployed applications has couple of random words embedded in it e.g. dataflow-nonvaluable-overapprehension-myMessageStream-rabbit. In my understanding that is the name given to the Dataflow Server instance and is inserted to make a reference. Is there a way to customise this name? That will enable me to know the name of applications in advance and hen run a tail on their logs.
您可以通过以下方式禁用此 属性 来覆盖应用名称中的随机名称生成:
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_ENABLE_RANDOM_APP_NAME_PREFIX=false
您可以使用设置特定 prefix
:
的部署程序 属性 控制应用程序名称
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_APP_NAME_PREFIX=myprefix
您可以尝试增加部署器属性 SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_STAGING_TIMEOUT
和 SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_STARTUP_TIMEOUT
以查看应用程序是否需要更多时间才能 stage/startup。
在我们的 use-case 中,我们需要创建一个 Message Stream 应用程序并将其部署到我们的私有 Cloud Foundry 环境。流应用程序旨在监听 RabbitMq queue 并触发任务,如流中定义的那样。
为了实现相同的目的,我们通过 运行 在 Mac 上本地使用 cloud-dataflow-server-cloudfoundry
。
下面是用于实现它的一组命令:-
- 设置Maven远程仓库
export MAVEN_REMOTE_REPOSITORIES_REPO1_URL=https://ftl.abc.com/NEXUS
设置 Cloud Foundry 目的地 -
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_URL=https://api.paas.abc-intl.com/ export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_ORG=Paas-Apps export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SPACE=DEV export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_DOMAIN=paas.abc-intl.com export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_USERNAME=abc@xyz.com export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_PASSWORD=password export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SKIP_SSL_VALIDATION=true export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_SERVICES=rabbitmq_server export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_BUILDPACK=java_buildpack_offline export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_MEMORY=512 export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_MEMORY=512 export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_URL=https://api.paas.abc-intl.com/ export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_ORG=Paas-Apps export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SPACE=DEV export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_DOMAIN=paas.abc-intl.com export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_USERNAME=abc@xyz.com export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_PASSWORD=password export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SKIP_SSL_VALIDATION=true export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_SERVICES=rabbitmq_server export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_BUILDPACK=java_buildpack_offline export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_MEMORY=512 export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_MEMORY=512
启动数据流服务器-
使用 spring 云属性构建 Dataflow Server CF 为:
- spring.name=数据流
- spring.cloud.config.uri=http://localhost:8888
- spring.cloud.dataflow.features.tasksEnabled=真
- spring.cloud.dataflow.features.streamsEnabled=真
- spring.cloud.deployer.cloudfoundry.task.taskTimeout=360
在本地启动 DF Server CF -
java -Djavax.net.ssl.trustStore=/Users/apache-maven-3.3.9/conf/keystore.jks -Djavax.net.ssl.trustStorePassword=password -jar spring-cloud-dataflow-server-cloudfoundry-1.1.0.BUILD-SNAPSHOT.jar
- 开始DFShell
- 导入启动器应用程序 -
stream-applications-rabbit-maven
- 注册应用程序 -
app register --name task-processor --type processor --uri maven://org.springframework.cloud.stream.app:tasklaunchrequest-transform-processor-rabbit:jar:1.1.0.BUILD-SNAPSHOT
app register --name task-launcher-local --type sink --uri maven://org.springframework.cloud.stream.app:task-launcher-local-sink-rabbit:jar:1.0.4.RELEASE
- 创建和部署流 -
stream create myMessageStream --definition "rabbit --rabbit.queues=cloud-stream-source --rabbit.requeue=true --spring.rabbitmq.host=host.abc.com --spring.rabbitmq.port=5672 --spring.cloud.stream.bindings.output.contentType='text/plain' | task-processor --uri=maven://com.example:thumbnail-generator:0.0.1-SNAPSHOT | task-launcher-local" --deploy
然而,部署失败并出现 TimeoutException,但在数据流服务器日志或应用程序日志中没有明确原因。
在cloud foundryspace中创建的应用程序在CF控制台上都显示Stopped。
这让我一头雾水,我有几个问题来了解可能的根本原因:
- 如果Stream部署成功,Stream部署到CF的应用应该是什么状态?这些显示为 started 还是 stopped?
- 已部署应用程序的名称中嵌入了几个随机词,例如dataflow-nonvaluable-overapprehension-myMessageStream-rabbit。据我了解,这是为 Dataflow Server 实例指定的名称,并被插入以进行引用。有没有办法自定义此名称?这将使我能够提前知道应用程序的名称,然后 运行 在他们的日志中找到尾巴。
任何 thoughts/help 将不胜感激。
In case of a successful Stream deployment, what shall be the status of applications deployed to CF by Stream? Do these show up as started or stopped?
stream list
命令将显示状态。如果流部署成功,状态应该是deployed
.
The name of the deployed applications has couple of random words embedded in it e.g. dataflow-nonvaluable-overapprehension-myMessageStream-rabbit. In my understanding that is the name given to the Dataflow Server instance and is inserted to make a reference. Is there a way to customise this name? That will enable me to know the name of applications in advance and hen run a tail on their logs.
您可以通过以下方式禁用此 属性 来覆盖应用名称中的随机名称生成:
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_ENABLE_RANDOM_APP_NAME_PREFIX=false
您可以使用设置特定 prefix
:
export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_APP_NAME_PREFIX=myprefix
您可以尝试增加部署器属性 SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_STAGING_TIMEOUT
和 SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_STARTUP_TIMEOUT
以查看应用程序是否需要更多时间才能 stage/startup。