0

在我们的用例中,我们需要创建一个 Message Stream 应用程序并将其部署到我们的私有 Cloud Foundry 环境中。流应用程序旨在侦听 RabbitMq 队列并触发流中定义的任务。

为了达到同样的效果,我们cloud-dataflow-server-cloudfoundry通过在 Mac 上本地运行它来使用。

以下是用于实现它的一组命令:-

  • 设置 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
    
  • 启动数据流服务器 -

    1. 使用 Spring Cloud 属性构建Dataflow Server CF ,如下所示:

      • spring.name=数据流
      • spring.cloud.config.uri= http://localhost:8888
      • spring.cloud.dataflow.features.tasksEnabled=true
      • spring.cloud.dataflow.features.streamsEnabled=true
      • spring.cloud.deployer.cloudfoundry.task.taskTimeout=360
    2. 在本地启动 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

  • 启动 DF 外壳
  • 导入入门应用 -stream-applications-rabbit-maven
  • 注册应用程序 -
    1. app register --name task-processor --type processor --uri maven://org.springframework.cloud.stream.app:tasklaunchrequest-transform-processor-rabbit:jar:1.1.0.BUILD-SNAPSHOT
    2. 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,但在 Dataflow 服务器日志或应用程序日志中都没有明确的原因。

Cloud Foundry 空间中创建的应用程序都在 CF 控制台上显示已停止。

这让我一无所知,我对此有几个问题要了解可能的根本原因:

  1. 如果 Stream 部署成功,通过 Stream 部署到 CF 的应用程序的状态应该是什么?这些显示为已启动还是已停止
  2. 已部署应用程序的名称中嵌入了几个随机词,例如 dataflow-nonvalueable-overapprehension-myMessageStream-rabbit。据我了解,这是赋予 Dataflow Server 实例的名称,并被插入以进行引用。有没有办法自定义这个名字?这将使我能够提前知道应用程序的名称,然后在它们的日志上运行。

任何想法/帮助将不胜感激。

4

1 回答 1

1

如果 Stream 部署成功,通过 Stream 部署到 CF 的应用程序的状态应该是什么?这些显示为已启动还是已停止?

stream list命令将显示状态。如果流部署成功,状态应该是deployed

已部署应用程序的名称中嵌入了几个随机词,例如 dataflow-nonvalueable-overapprehension-myMessageStream-rabbit。据我了解,这是赋予 Dataflow Server 实例的名称,并被插入以进行引用。有没有办法自定义这个名字?这将使我能够提前知道应用程序的名称,然后在它们的日志上运行。

您可以通过执行以下操作禁用此属性来覆盖应用程序名称中的随机名称生成: export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_ENABLE_RANDOM_APP_NAME_PREFIX=false

您可以使用设置特定的 deployer 属性来控制应用程序名称prefix

export SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_APP_NAME_PREFIX=myprefix

您可以尝试增加部署程序属性SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_STAGING_TIMEOUTSPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_STARTUP_TIMEOUT查看应用程序是否需要更多时间来暂存/启动。

于 2016-11-10T09:22:41.613 回答