Spring cloud 在Spring云数据流中部署现有的Spring云流应用程序

Spring cloud 在Spring云数据流中部署现有的Spring云流应用程序,spring-cloud,spring-cloud-stream,spring-cloud-dataflow,Spring Cloud,Spring Cloud Stream,Spring Cloud Dataflow,我已经使用SpringCloudStream(SCS)实现了一个应用程序,它有3个组件:1个source@EnableBinding(source.class)、1个processor@EnableBinding(processor.class)和1个sink@EnableBinding(sink.class),我使用ApacheKafka绑定器进行通信 作为这些组件配置的一部分,我使用了Spring Cloud Stream中的几个属性,例如要使用的主题、分区数量、序列化程序、最大轮询等: s

我已经使用SpringCloudStream(SCS)实现了一个应用程序,它有3个组件:1个source@EnableBinding(source.class)、1个processor@EnableBinding(processor.class)和1个sink@EnableBinding(sink.class),我使用ApacheKafka绑定器进行通信

作为这些组件配置的一部分,我使用了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
目前,我“手动”编排这3个组件,但我希望使用SpringCloudDataFlow(SCDF)创建一个流,并能够更好地操作它们

根据SCDF文档,任何SCS应用程序都可以直接用作流中定义的应用程序。此外,可以通过外部属性文件提供应用程序的属性。但是,我提供了我的“application.yml”属性文件,但它不起作用:

stream deploy --name mystream --definition "mysource | myprocessor | mysink' --deploy --propertiesFile /conf/application.yml
经过一些研究,我意识到文档中规定任何应用程序的任何属性都必须以以下格式传递:

app.<app-name>.<property-name>=<value>
app=
所以我有一些问题:

  • 我是否已将该“应用程序”添加到所有现有属性中
  • 有没有办法在SCDF中为我的应用程序提供类似“-spring.config.location”的内容
  • 如果我已经在application.yml中提供了一个“spring.application.name”属性,那么它对SCDF有何影响,因为我在定义流时也提供了一个应用程序名称
  • 如果我已经在application.yml中提供了“server.port”属性,那么它对SCDF有何影响?SCDF会选择它作为应用程序使用的端口,还是忽略它
  • 提前感谢您的支持

    我是否必须将该“应用程序”添加到我现有的所有属性中

    对。你可以有这样的东西:

    
    应用程序:
    应用程序名称:
    春天:
    云:
    ...
    

    有没有办法在SCDF中为我的应用程序提供类似“-spring.config.location”的内容

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

    
    stream deploy mystream--属性“app.*.spring.config.location=configFile”
    
    或者,使用
    app.app name
    前缀为每个应用程序配置不同的配置文件

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

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

    您是否出于某种原因在应用程序中明确使用了
    spring.application.name
    。我想如果您更改spring.application.name,metrics collector中会有一些影响

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


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

    关于最后一个问题,my application.yml中的属性最终被SCDF覆盖。但是,即使在application.yml文件中设置app.myappp.server.port,它也不会被拾取。使其工作的唯一方法是使用--properties“app.myapp.server.port=8081”进行部署。任何线索?application.yml在属性解析层次结构中的优先级最低。你能检查一下应用程序
    服务器中是否还有其他位置。端口设置了吗?我已经找到了原因:所有属性也必须以字符串形式提供;否则,它们就会被忽略。我不知道为什么这种行为是故意的,所以我在这里发布了另一个问题-->