From 6ced9ca19782e82e9c4e488da82135d32b3c4560 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 14 Feb 2018 15:10:19 +0100 Subject: [PATCH] Restructure Cloud messaging This commit restructures the cloud messaging group by removing binder specific checkbox for Spring Cloud Bus and Spring Cloud Stream. A new "Messaging" group is added with RabbitMQ, Kafka and JMS. To create a new cloud messaging project, the user should now select the technology and a binder. To support Spring Cloud Stream with Kafka streams, a dedicated "Kafka Streams" has been introduced. Closes gh-557 --- ...ingCloudMessagingRequestPostProcessor.java | 9 +++- .../src/main/resources/application.yml | 11 ++--- ...oudMessagingRequestPostProcessorTests.java | 41 ++++++++++++++++++- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessor.java b/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessor.java index c8afe11e07..754d2032ef 100644 --- a/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessor.java +++ b/initializr-service/src/main/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessor.java @@ -25,6 +25,10 @@ /** * Determine the appropriate Spring Cloud stream dependency to use based on the * selected messaging technology. + *

+ * Does not replace the messaging technology jar by the relevant binder. If more than + * one tech is selected, it is far more easier to remove the unnecessary binder jar than + * to figure out the name of the tech jar to add to keep support for that technology. * * @author Stephane Nicoll */ @@ -50,7 +54,10 @@ public void postProcessAfterResolution(ProjectRequest request, boolean hasReactiveSpringCloudStream = hasDependency(request, "reactive-cloud-stream"); boolean hasSpringCloudBus = hasDependency(request, "cloud-bus"); - if (hasSpringCloudStream || hasReactiveSpringCloudStream || hasSpringCloudBus) { + boolean hasSpringCloudTurbineStream = hasDependency(request, + "cloud-turbine-stream"); + if (hasSpringCloudStream || hasReactiveSpringCloudStream || hasSpringCloudBus + || hasSpringCloudTurbineStream) { if (hasDependencies(request, "amqp")) { request.getResolvedDependencies().add(RABBIT_BINDER); } diff --git a/initializr-service/src/main/resources/application.yml b/initializr-service/src/main/resources/application.yml index b69c2753cc..a11d9df216 100644 --- a/initializr-service/src/main/resources/application.yml +++ b/initializr-service/src/main/resources/application.yml @@ -727,8 +727,8 @@ initializr: - name: RabbitMQ id: amqp description: Advanced Message Queuing Protocol via spring-rabbit + weight: 100 keywords: - - stream - messaging links: - rel: guide @@ -745,7 +745,6 @@ initializr: artifactId: spring-kafka starter: false keywords: - - stream - messaging links: - rel: reference @@ -806,7 +805,7 @@ initializr: artifactId: spring-cloud-starter-oauth2 - name: Cloud Task id: cloud-task - description: Task result tracking along with integration with batch and streams + description: Task result tracking and integration with Spring Batch groupId: org.springframework.cloud artifactId: spring-cloud-starter-task versionRange: "1.3.0.RELEASE" @@ -985,7 +984,7 @@ initializr: - versionRange: "1.5.0.BUILD-SNAPSHOT" - name: Turbine Stream id: cloud-turbine-stream - description: Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and Spring Cloud Stream (choose a specific Stream binder implementation to complement this) + description: Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ) versionRange: 1.3.0.RELEASE groupId: org.springframework.cloud artifactId: spring-cloud-starter-netflix-turbine-stream @@ -1041,12 +1040,14 @@ initializr: id: cloud-stream description: Messaging microservices with Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ) versionRange: 1.3.0.RELEASE + weight: 90 groupId: org.springframework.cloud artifactId: spring-cloud-stream - name: Reactive Cloud Stream id: reactive-cloud-stream description: Reactive messaging microservices with Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ) versionRange: 2.0.0.BUILD-SNAPSHOT + weight: 90 groupId: org.springframework.cloud artifactId: spring-cloud-stream-reactive - name: Cloud AWS @@ -1213,7 +1214,7 @@ initializr: - name: Kafka Streams id: kafka-streams weight: 90 - description: Client library for building applications and microservices, where the input and output data are stored in Kafka clusters. + description: Support for building stream processing applications and microservices with Apache Kafka Streams (formerly known as KStream). Best used with Spring Cloud Stream. versionRange: 1.5.0.RC1 groupId: org.apache.kafka artifactId: kafka-streams diff --git a/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessorTests.java b/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessorTests.java index 4afb60ddfd..522486eb75 100644 --- a/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessorTests.java +++ b/initializr-service/src/test/java/io/spring/initializr/service/extension/SpringCloudMessagingRequestPostProcessorTests.java @@ -170,6 +170,45 @@ public void springCloudBusWithAllBinders() { .hasSpringBootStarterTest() .hasDependenciesCount(7); } - + @Test + public void springCloudTurbineStreamWithRabbit() { + ProjectRequest request = createProjectRequest("cloud-turbine-stream", "amqp"); + request.setBootVersion("2.0.0.BUILD-SNAPSHOT"); + generateMavenPom(request) + .hasDependency(getDependency("cloud-turbine-stream")) + .hasDependency(getDependency("amqp")) + .hasDependency(RABBIT_BINDER) + .hasSpringBootStarterTest() + .hasDependenciesCount(4); + } + + @Test + public void springCloudTurbineStreamWithKafka() { + ProjectRequest request = createProjectRequest("cloud-turbine-stream", "kafka"); + request.setBootVersion("2.0.0.BUILD-SNAPSHOT"); + generateMavenPom(request) + .hasDependency(getDependency("cloud-turbine-stream")) + .hasDependency(getDependency("kafka")) + .hasDependency(KAFKA_BINDER) + .hasSpringBootStarterTest() + .hasDependenciesCount(4); + } + + @Test + public void springCloudTurbineStreamWithAllBinders() { + ProjectRequest request = createProjectRequest("cloud-turbine-stream", "amqp", + "kafka", "kafka-streams"); + request.setBootVersion("2.0.0.BUILD-SNAPSHOT"); + generateMavenPom(request) + .hasDependency(getDependency("cloud-turbine-stream")) + .hasDependency(getDependency("amqp")) + .hasDependency(getDependency("kafka")) + .hasDependency(getDependency("kafka-streams")) + .hasDependency(RABBIT_BINDER) + .hasDependency(KAFKA_BINDER) + .hasSpringBootStarterTest() + .hasDependenciesCount(7); + } + }