跳到主要内容
版本:4.2.0

功能绑定名称

DeepSeek V3 中英对照 Functional binding names

与之前版本的 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 对应于绑定的类型(例如 input 或 output)。index 是输入或输出绑定的索引。对于典型的单输入/输出函数,它始终为 0,因此它仅与具有多个输入和输出参数的函数相关。

因此,例如,如果您希望将此函数的输入映射到名为 "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 目标关联起来。

有关属性及其他配置选项的更多信息,请参阅配置选项部分。