在 Spring Cloud Data Flow 中部署现有 Spring Cloud Stream 应用程序
Deploying an existing Spring Cloud Stream application in Spring Cloud Data Flow
我已经使用 Spring Cloud Stream (SCS) 实现了一个应用程序,其中包含 3 个组件: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
目前,我编排了这 3 个组件 "manually",但我想使用 Spring 云数据流 (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 会选择它作为应用程序使用的端口还是会忽略它?
在此先感谢您的支持。
Do I have to add that "app." to all my existing properties?
是的。你可以有这样的东西:
app:
app-name:
spring:
cloud:
...
Is there any way I can provide something like "--spring.config.location" to my application in SCDF?
对于部署的流,只有--propertiesFile
可以在运行时提供属性。但是,您仍然可以使用特定于应用程序的属性,例如:
stream deploy mystream --properties "app.*.spring.config.location=configFile"
或者,每个带有 app.app-name
前缀的应用程序的不同配置文件。
这样,所有部署的应用程序都会获得这些属性。
If I already provide a "spring.application.name" property in the application.yml, how does it impact SCDF, as I also provide an application name when defining the stream?
您是否出于某种原因在您的应用程序中明确使用 spring.application.name
。我想如果更改 spring.application.name.
会对指标收集器产生一些影响
If I already provide a "server.port" property in the application.yml, how does it impact SCDF? Will SCDF pick it as the port to use for the application or will it just ignore it?
它的工作方式与 Spring 引导 属性 源优先级相同。应用程序 application.yml 中的 server.port
优先于其他 属性 源,这些源可以通过流 definition/deployment 属性设置。
我已经使用 Spring Cloud Stream (SCS) 实现了一个应用程序,其中包含 3 个组件: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
目前,我编排了这 3 个组件 "manually",但我想使用 Spring 云数据流 (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 会选择它作为应用程序使用的端口还是会忽略它?
在此先感谢您的支持。
Do I have to add that "app." to all my existing properties?
是的。你可以有这样的东西:
app:
app-name:
spring:
cloud:
...
Is there any way I can provide something like "--spring.config.location" to my application in SCDF?
对于部署的流,只有--propertiesFile
可以在运行时提供属性。但是,您仍然可以使用特定于应用程序的属性,例如:
stream deploy mystream --properties "app.*.spring.config.location=configFile"
或者,每个带有 app.app-name
前缀的应用程序的不同配置文件。
这样,所有部署的应用程序都会获得这些属性。
If I already provide a "spring.application.name" property in the application.yml, how does it impact SCDF, as I also provide an application name when defining the stream?
您是否出于某种原因在您的应用程序中明确使用 spring.application.name
。我想如果更改 spring.application.name.
If I already provide a "server.port" property in the application.yml, how does it impact SCDF? Will SCDF pick it as the port to use for the application or will it just ignore it?
它的工作方式与 Spring 引导 属性 源优先级相同。应用程序 application.yml 中的 server.port
优先于其他 属性 源,这些源可以通过流 definition/deployment 属性设置。