最新の安定バージョンについては、spring-cloud-stream 5.0.0 を使用してください。

明示的なバインディングの作成

このセクションでは、バインディングを明示的に作成する宣言的な方法について説明します。フレームワークは、バインディングをプログラム的に作成する方法も提供しています。詳細については、新しいバインディングを定義し、既存のバインディングを管理するを参照してください。

前のセクションでは、アプリケーションによって提供される FunctionSupplier、または Consumer Bean の名前によって暗黙的に駆動されるバインディングがどのように作成されるかを説明しました。ただし、バインディングがどの関数にも関連付けられていない場合に、バインディングを明示的に作成する必要がある場合があります。これは通常、StreamBridge を介して他のフレームワークとの統合をサポートするために行われます。

Spring Cloud Stream を使用すると、spring.cloud.stream.input-bindings および spring.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 {
}

ご覧のとおり、構成に関数が定義されていないときに 2 つの入力バインディングと 2 つの出力バインディングを宣言しましたが、これらのバインディングを正常に作成し、対応するチャネルにアクセスすることができました。

関数バインディング名とは異なり、明示的に作成されたバインディングでは、次の理由により、in-0/out-0 などの追加のサフィックスは必要ありません。
  • バインディング名は関数によってサポートされていません

  • 定義上、入力または出力バインディングをすでに表している

  • 複数の入力または出力を持つことはできません。

spring.cloud.stream.output-bindings=hello は hello (hello-out-0 ではない)という名前のバインディングになり、さらに spring.cloud.stream.bindings.hello.destination=foobar として参照できます。