spring-cloud-stream:在spring-cloud-dataflow-server-cf上流部署失败



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

为了达到同样的效果,我们在Mac上本地运行cloud-dataflow-server-cloudfoundry

下面是用来实现它的命令集:-

  • 设置Maven远程仓库export MAVEN_REMOTE_REPOSITORIES_REPO1_URL=https://ftl.abc.com/NEXUS
  • Setup Cloud Foundry destination -

    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/gh>
      • 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

  • 启动Shell
  • 导入启动器应用程序- 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服务器日志或应用程序日志中没有明确的原因。

在云代工空间中创建的应用程序在CF控制台中都显示Stopped

这让我很困惑,我对此有几个问题来理解可能的根本原因:

  1. 如果成功部署了流,那么由流部署到CF的应用程序的状态应该是什么?这些显示为started还是stopped?
  2. 已部署应用程序的名称中嵌入了几个随机单词,例如dataflow- nonvalue - overcapture - mymessagestream -rabbit。在我的理解中,这是给Dataflow Server实例的名称,插入它是为了引用。有办法定制这个名字吗?这将使我能够提前知道应用程序的名称,然后对它们的日志进行跟踪。

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

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

已部署应用程序的名称中嵌入了几个随机单词,例如dataflow- nonvalue - overcapture - 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,看看应用程序是否需要更多的时间来阶段/启动

最新更新