spring-cloud-stream:流式部署在spring-cloud-dataflow-server-cf

时间:2016-11-10 08:41:45

标签: spring-cloud-stream spring-cloud-dataflow

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

为了达到同样的目的,我们在Mac上本地运行cloud-dataflow-server-cloudfoundry使用export MAVEN_REMOTE_REPOSITORIES_REPO1_URL=https://ftl.abc.com/NEXUS

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

  • 设置Maven远程仓库 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
  • 设置Cloud Foundry目的地 -

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

    1. 使用spring cloud属性构建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
    2. 在本地启动DF服务器CF - stream-applications-rabbit-maven

  • 启动DF Shell
  • 导入入门应用 - app register --name task-processor --type processor --uri maven://org.springframework.cloud.stream.app:tasklaunchrequest-transform-processor-rabbit:jar:1.1.0.BUILD-SNAPSHOT
  • 注册应用 -
    1. 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
    2. 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
  • 创建&部署流 - int number,number1;// declare before oncreate number = (new Random().nextInt(100)); number1 = (new Random().nextInt(100)); t1.setText(String.valueOf(number)); t2.setText(String.valueOf(number1)); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String a = editText.getText().toString(); if (Integer.parseInt(a) == number*number1) { ActivityA.this.finish(); } else { //regenerate random numbers. number = (new Random().nextInt(100)); number1 = (new Random().nextInt(100)); t1.setText(String.valueOf(number)); t2.setText(String.valueOf(number1)); editText.setText(null); } } });

然而,部署因 TimeoutException 而失败,但在Dataflow服务器日志或应用程序中没有明确的理由。日志。

云代工厂空间中创建的应用程序都在CF控制台上显示已停止

这使我无能为力,而且我对此有很多疑问,以了解可能的根本原因:

  1. 如果Stream部署成功,Stream会部署到CF的应用程序的状态是什么?这些是否显示为已启动已停止
  2. 已部署的应用程序的名称中嵌入了几个随机字词,例如数据流 - nonvaluable-overapprehension-myMessageStream兔。在我的理解中,这是给予Dataflow Server实例的名称,并被插入以进行引用。有没有办法自定义这个名字?这将使我能够提前知道应用程序的名称,并在他们的日志上留下尾巴。
  3. 任何想法/帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

如果Stream部署成功,Stream会部署到CF的应用程序状态如何?这些是否显示为已开始或已停止?

export default class TagsBriefItem extends Component { render() { return ( <MuiThemeProvider> <button onClick={this.props.onclick(this.props.id)} style={{backgroundColor: "#293C8E"}} className="tagsBriefItem"> <h2 style={styles.headline}>{this.props.description}</h2> <h3 style={styles.headline}>{this.props.percent}</h3> </button> </MuiThemeProvider> ); } } 命令将显示状态。如果流部署成功,则状态应为stream list

  

已部署的应用程序的名称中嵌入了几个随机单词,例如数据流 - nonvaluable-overapprehension-myMessageStream兔。在我的理解中,这是给予Dataflow Server实例的名称,并被插入以进行引用。有没有办法自定义这个名字?这将使我能够提前知道应用程序的名称,并在他们的日志上留下尾巴。

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

您可以使用deployer属性控制应用名称,该属性设置特定的 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,以查看该应用是否需要更多时间来暂存/启动。