GH-2848: Partitioning issues in StreamBridge

- When output-bindings property is explicitly provided and native-encoding
   is used, StreamBridge does not add the partitioning interceptor.
   This commit addresses this issue.

Resolves https://github.com/spring-cloud/spring-cloud-stream/issues/2848
This commit is contained in:
Soby Chacko
2023-11-15 13:31:37 -05:00
committed by Oleg Zhurakousky
parent ba0924acc2
commit 06af5ceeb0
2 changed files with 35 additions and 10 deletions

View File

@@ -181,12 +181,12 @@ class StreamBridgeTests {
}
}
// For more context on this test: https://github.com/spring-cloud/spring-cloud-stream/issues/2815
@Test
void ensurePartitioningWorksWhenNativeEncodingEnabled() {
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
TestChannelBinderConfiguration.getCompleteConfiguration(
EmptyConfiguration.class)).web(WebApplicationType.NONE).run(
"--spring.cloud.stream.source=outputA;outputB",
"--spring.cloud.stream.bindings.outputA-out-0.producer.partition-count=3",
"--spring.cloud.stream.bindings.outputA-out-0.producer.use-native-encoding=true",
"--spring.cloud.stream.bindings.outputA-out-0.producer.partition-key-expression=headers['partitionKey']")) {
@@ -200,6 +200,24 @@ class StreamBridgeTests {
}
}
// Fore more context on this test: https://github.com/spring-cloud/spring-cloud-stream/issues/2848
@Test
void ensurePartitioningWorksWhenNativeEncodingEnabledAndOutputBindingsExist() {
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
TestChannelBinderConfiguration.getCompleteConfiguration(
EmptyConfiguration.class)).web(WebApplicationType.NONE).run(
"--spring.cloud.stream.bindings.outputA-out-0.producer.partition-count=3",
"--spring.cloud.stream.bindings.outputA-out-0.producer.use-native-encoding=true",
"--spring.cloud.stream.output-bindings=outputA-out-0",
"--spring.cloud.stream.bindings.outputA-out-0.producer.partition-key-expression=headers['partitionKey']")) {
StreamBridge streamBridge = context.getBean(StreamBridge.class);
streamBridge.send("outputA-out-0", MessageBuilder.withPayload("A").setHeader("partitionKey", "A").build());
OutputDestination output = context.getBean(OutputDestination.class);
assertThat(output.receive(1000, "outputA-out-0").getHeaders().containsKey("scst_partition")).isTrue();
}
}
@SuppressWarnings("rawtypes")
@Test
void test_2785() throws Exception {