显式绑定创建

本节描述了以声明方式显式创建绑定的方法。该框架还提供了以编程方式创建绑定的方法。有关更多信息,请参阅 定义新绑定并管理现有绑定

在上一节中,我们解释了如何根据应用程序提供的 FunctionSupplierConsumer bean 的名称隐式创建绑定。 但是,有时您可能需要显式创建绑定,其中绑定不与任何函数关联。这通常是为了通过 StreamBridge 支持与其他框架的集成。

Spring Cloud Stream 允许您通过 spring.cloud.stream.input-bindingsspring.cloud.stream.output-bindings 属性显式定义输入和输出绑定。 请注意属性名称中的复数形式,它允许您通过简单地使用 ; 作为分隔符来定义多个绑定。 请看以下测试用例作为示例:

@Test
public void testExplicitBindings() {
	try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
		TestChannelBinderConfiguration.getCompleteConfiguration(EmptyConfiguration.class))
				.web(WebApplicationType.NONE)
				.run("--spring.jmx.enabled=false",
					"--spring.cloud.stream.input-bindings=fooin;barin",
					"--spring.cloud.stream.output-bindings=fooout;barout")) {


	. . .
	}
}

@EnableAutoConfiguration
@Configuration
public static class EmptyConfiguration {
}

如您所见,我们声明了两个输入绑定和两个输出绑定,而我们的配置中没有定义任何函数,但我们仍然能够成功创建这些绑定并访问其相应的通道。

函数绑定名称 不同,显式创建的绑定 不需要额外的后缀,例如 in-0/out-0,因为:

  • 绑定名称不由函数支持

  • 它在定义上已经表示 输入输出 绑定

  • 它不能有多个输入或输出。

因此,spring.cloud.stream.output-bindings=hello 将导致名为 hello 的绑定(而不是 hello-out-0),您可以进一步将其称为 spring.cloud.stream.bindings.hello.destination=foobar