对于最新的稳定版本,请使用 spring-cloud-stream 4.3.0! |
功能绑定名称
与以前版本的 spring-cloud-stream 中使用的基于注释的支持(旧版)所需的显式命名不同,函数式 编程模型在绑定名称方面默认使用简单的约定,从而大大简化了应用程序配置。 让我们看第一个例子:
@SpringBootApplication
public class SampleApplication {
@Bean
public Function<String, String> uppercase() {
return value -> value.toUpperCase();
}
}
在前面的示例中,我们有一个应用程序,其中包含一个充当消息处理程序的函数。作为Function
它有一个
输入和输出。
用于命名输入和输出绑定的命名约定如下:
-
输入-
<functionName> + -in- + <index>
-
输出-
<functionName> + -out- + <index>
这in
和out
对应于绑定的类型(例如输入或输出)。
这index
是输入或输出绑定的索引。对于典型的单输入/输出功能,它始终为 0,
因此,它仅与具有多个输入和输出参数的函数相关。
因此,例如,如果您想将此函数的输入映射到远程 destination(例如,topic、queue 等)称为“my-topic”,您可以使用以下属性执行此作:
--spring.cloud.stream.bindings.uppercase-in-0.destination=my-topic
请注意如何uppercase-in-0
用作属性名称中的段。同样的道理uppercase-out-0
.
描述性绑定名称
有时,为了提高可读性,你可能希望给绑定一个更具描述性的名称(例如“帐户”、“订单”等)。
另一种看待它的方式是,您可以将隐式绑定名称映射到显式绑定名称。你可以用spring.cloud.stream.function.bindings.<binding-name>
财产。
此属性还为依赖于基于自定义接口的现有应用程序提供迁移路径
需要显式名称的绑定。
例如
--spring.cloud.stream.function.bindings.uppercase-in-0=input
在前面的示例中,您映射并有效地重命名了uppercase-in-0
将名称绑定到input
.现在所有配置
属性可以引用input
binding name 代替(例如--spring.cloud.stream.bindings.input.destination=my-topic
).
虽然描述性绑定名称可以增强配置的可读性,但它们也会创建
通过将隐式绑定名称映射到显式绑定名称,这是另一个级别的误导。并且由于所有随后的
配置属性将使用显式绑定名称,您必须始终引用此“bindings”属性
关联它实际对应的函数。我们认为,对于大多数情况(功能成分除外)
这可能有点矫枉过正,因此,我们建议完全避免使用它,尤其是
由于不使用它,因此在 Binder Destination 和 Binding Name 之间提供了清晰的路径,例如spring.cloud.stream.bindings.uppercase-in-0.destination=sample-topic ,
其中您清楚地关联了uppercase function 设置为sample-topic 目的地。 |
有关属性和其他配置选项的更多信息,请参阅配置选项部分。