功能绑定名称
与之前版本中使用的注释支持(遗留)所需的显式命名不同,编程模型的函数式默认情况下在绑定名称方面采用简单的约定,从而大大简化了应用程序配置。让我们看一下第一个示例:
@SpringBootApplication
public class SampleApplication {
@Bean
public Function<String, String> uppercase() {
return value -> value.toUpperCase();
}
}
在前述示例中,我们有一个应用程序,其中包含一个单一的功能,该功能充当消息处理程序。作为Function,它具有一个输入和一个输出。
The naming convention used to name input and output bindings is as follows:
-
input -
<functionName> + -in- + <index> -
output -
<functionName> + -out- + <index>
代码中的in和out对应绑定类型(例如或
例如,如果您希望将此函数的输入映射到名为“my-topic”的远程目标(如主题、队列等),您可以通过以下属性来实现:
--spring.cloud.stream.bindings.uppercase-in-0.destination=my-topic
请注意如何在属性名称中使用 uppercase-in-0 作为段。对于 uppercase-out-0 的情况也是一样。
说明绑定名称
有时为了提高可读性,您可能希望给绑定提供更具描述性的名称(例如 'account'、'orders' 等)。另一种理解方式是您可以将 隐式绑定名 映射到 显式绑定名。并且您可以使用spring.cloud.stream.function.bindings.<binding-name>属性来实现这一点。此属性还为依赖于需要明确名称的基于自定义接口的现有应用程序提供了迁移路径。
例如,
--spring.cloud.stream.function.bindings.uppercase-in-0=input
在前面的示例中,您映射并有效地将 uppercase-in-0 绑定名称重命名为 input。现在所有配置属性都可以引用 input 绑定名称(例如,--spring.cloud.stream.bindings.input.destination=my-topic)。
虽然描述性绑定名称可以提高配置的可读性,但它们也会通过将隐式绑定名称映射到显式绑定名称而造成另一个层次的误导。而且由于所有后续的配置属性都将使用显式的绑定名称,因此您必须始终引用此“bindings”属性来确定它实际上对应于哪个函数。我们认为,在大多数情况下(除了功能组合),这可能是过度设计了,所以我们建议完全避免使用它,特别是因为不使用它可以清楚地在绑定目标和绑定名称之间建立路径,例如spring.cloud.stream.bindings.uppercase-in-0.destination=sample-topic,其中您清楚地将uppercase函数的输入与sample-topic目的地相关联。 |
有关属性和其他配置选项的更多信息,请参阅配置选项部分。