在Spring Cloud Data Flow中部署现有的Spring Cloud Stream应用程序

时间:2017-05-26 13:54:09

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

我已经使用具有3个组件的Spring Cloud Stream(SCS)实现了一个应用程序:1个源@EnableBinding(Source.class),1个@EnableBinding(Processor.class)处理器和1个@EnableBinding(Sink.class)接收器我使用Apache Kafka绑定器进行通信。

作为这些组件配置的一部分,我使用了Spring Cloud Stream中的几个属性,例如要使用的主题,分区数,序列化程序,最大轮询等。:

spring:
  application:
    name: myapp

  cloud:
    stream:
      bindings:
        output:
          destination: topic1
          producer:
            partitionCount: 5
            partitionKeyExpression: headers.kafka_messageKey
      kafka:
        binder:
          brokers: 10.138.128.62
          defaultBrokerPort: 9092
          zkNodes: 10.138.128.62
          defaultZkPort: 2181
          requiredAcks: -1
          replicationFactor: 1
          autoCreateTopics: true
          autoAddPartitions: true
        bindings:
          output:
            producer:
              configuration:
                key.serializer: org.apache.kafka.common.serialization.StringSerializer
                value.serializer: org.apache.kafka.common.serialization.ByteArraySerializer

所有这些属性都在外部文件“application.yml”中定义。我在执行组件时指出:

java -jar mycomponent.jar --spring.config.location=/conf/application.yml

目前,我手动编排了这三个组件"但是我想使用Spring Cloud Data Flow(SCDF)来创建一个流,并且能够更好地运行它们。

根据SCDF文档,任何SCS应用程序都可以直接用作要在流中定义的应用程序。除此之外,可以通过外部属性文件提供应用程序的属性。但是,我正在提供我的应用程序。属性文件,它不起作用:

stream deploy --name mystream --definition "mysource | myprocessor | mysink' --deploy --propertiesFile /conf/application.yml

经过一些研究,我意识到文档说明任何应用程序的任何属性都必须以这种格式传递:

app.<app-name>.<property-name>=<value>

所以我有一些问题:

  1. 我是否添加了#34; app。&#34;到我现有的所有房产?
  2. 有什么方法可以提供类似&#34; - spring.config.location&#34;我在SCDF的申请?
  3. 如果我已经提供了一个&#34; spring.application.name&#34; application.yml中的属性,它如何影响SCDF,因为我在定义流时也提供了应用程序名称?
  4. 如果我已经提供了&#34; server.port&#34; application.yml中的属性,它如何影响SCDF? SCDF会选择它作为用于应用程序的端口,还是会忽略它?
  5. 提前感谢您的支持。

1 个答案:

答案 0 :(得分:1)

  

我是否必须添加“app”。到我现有的所有房产?

是。你可以这样:

app: app-name: spring: cloud: ...

  

有什么办法可以在SCDF中为我的应用程序提供类似“--spring.config.location”的内容吗?

对于部署的流,只有--propertiesFile可以在运行时提供属性。但是,您仍然可以使用特定于应用程序的属性,如:

stream deploy mystream --properties "app.*.spring.config.location=configFile" 或者,每个具有app.app-name前缀的应用程序的不同configFiles。

这样,部署的所有应用都将获得这些属性。

  

如果我已经在application.yml中提供了“spring.application.name”属性,那么它如何影响SCDF,因为我在定义流时也提供了应用程序名称?

出于某种原因,您是否在申请中明确使用spring.application.name?我想如果你改变了spring.application.name,那么在metrics collector中会有一些影响。

  

如果我已在application.yml中提供“server.port”属性,它对SCDF有何影响? SCDF会选择它作为用于应用程序的端口,还是会忽略它?

它的工作方式与Spring Boot属性源优先级相同。应用程序的application.yml中的server.port将优先于可通过流定义/部署属性设置的其他属性源。