diff --git a/spring-cloud-function-samples/function-sample-cloudevent-stream/README.adoc b/spring-cloud-function-samples/function-sample-cloudevent-stream/README.adoc index 04529c04c..1ca0bad56 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent-stream/README.adoc +++ b/spring-cloud-function-samples/function-sample-cloudevent-stream/README.adoc @@ -6,28 +6,14 @@ their requirement while taking care-off non-functional aspects. For more informa our https://spring.io/projects/spring-cloud-function[project page]. The example consists of a Spring boot configuration class -https://github.com/spring-cloud/spring-cloud-function/blob/master/spring-cloud-function-samples/function-sample-cloudevent/src/main/java/io/spring/cloudevent/DemoApplication.java[DemoApplication] +https://github.com/spring-cloud/spring-cloud-function/blob/master/spring-cloud-function-samples/function-sample-cloudevent-stream/src/main/java/io/spring/cloudevent/DemoApplication.java[DemoApplication] which contains a sample function which you can interact with following via AMQP and Apache Kafka. -### Function as message handler (From RabbitMQ to Apache Kafka) +### From RabbitMQ to Apache Kafka -Assuming you have RabbitMQ and Kafka running, start the application and send a Message to RabbitMQ. You can use RabbitMQ dashboard (if you have it installed) -and send message to `hire-in-0` exchange. -To stay compliant with Cloud Event specification you should provide attributes with AMQP appropriate prefixes (i.e., cloudEvents:). For example: +Assuming you have RabbitMQ and Kafka running, start the application and send a Message to RabbitMQ. -``` -cloudEvents:specversion=1.0 -cloudEvents:type=hire -cloudEvents:source:spring.io/spring-event -cloudEvents:id=0001 -``` - -And your data: -``` -{"firstName":"John", "lastName":"Doe"} -``` - -To simplify this demo part we included a test case which effectively automates this demo by sending Cloud Event to RabbitMQ and receives one from Apache Kafka. +We included a https://github.com/spring-cloud/spring-cloud-function/blob/master/spring-cloud-function-samples/function-sample-cloudevent-stream/src/test/java/io/spring/cloudevent/DemoApplicationTests.java[demo test case] which effectively automates this demo by sending Cloud Event to RabbitMQ and receives one from Apache Kafka. ``` Message messageToAMQP = CloudEventMessageBuilder @@ -50,4 +36,19 @@ since it was determined by the framework that the target destination is Apache K This last point is worth elaborating a bit. We already established that setting Cloud Event attributes is a non-functional aspect and because of it we’ve exposed a mechanism for you to deal with it outside of your business logic. But what about attribute prefixes? Note that we are running the same code in different execution contexts. This means that the attribute prefixes actually depend on the execution context. So by being aware of the execution -context, the framework ensures the correctness of the Cloud Event attribute prefixes. \ No newline at end of file +context, the framework ensures the correctness of the Cloud Event attribute prefixes. + +You can also use http://localhost:15672/[RabbitMQ dashboard] (if you have it installed) and send message to `hire-in-0` exchange. +To stay compliant with Cloud Event specification you should provide attributes with AMQP appropriate prefixes (i.e., `cloudEvents:`). For example: + +``` +cloudEvents:specversion=1.0 +cloudEvents:type=hire +cloudEvents:source:spring.io/spring-event +cloudEvents:id=0001 +``` + +And your data: +``` +{"firstName":"John", "lastName":"Doe"} +``` diff --git a/spring-cloud-function-samples/function-sample-cloudevent-stream/images/rabbit-send-binary.png b/spring-cloud-function-samples/function-sample-cloudevent-stream/images/rabbit-send-binary.png deleted file mode 100644 index 52bd15117..000000000 Binary files a/spring-cloud-function-samples/function-sample-cloudevent-stream/images/rabbit-send-binary.png and /dev/null differ diff --git a/spring-cloud-function-samples/function-sample-cloudevent-stream/images/rabbit-send-structured.png b/spring-cloud-function-samples/function-sample-cloudevent-stream/images/rabbit-send-structured.png deleted file mode 100644 index d5b45d3e7..000000000 Binary files a/spring-cloud-function-samples/function-sample-cloudevent-stream/images/rabbit-send-structured.png and /dev/null differ diff --git a/spring-cloud-function-samples/function-sample-cloudevent-stream/src/test/java/io/spring/cloudevent/DemoApplicationTests.java b/spring-cloud-function-samples/function-sample-cloudevent-stream/src/test/java/io/spring/cloudevent/DemoApplicationTests.java index 822d033e7..c2ec6e012 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent-stream/src/test/java/io/spring/cloudevent/DemoApplicationTests.java +++ b/spring-cloud-function-samples/function-sample-cloudevent-stream/src/test/java/io/spring/cloudevent/DemoApplicationTests.java @@ -1,12 +1,9 @@ package io.spring.cloudevent; import java.util.Collections; -import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; -import org.apache.kafka.clients.admin.AdminClient; import org.apache.kafka.clients.admin.KafkaAdminClient; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ConditionEvaluationResult; @@ -15,23 +12,13 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtensionContext; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; -import org.springframework.amqp.support.converter.MessagingMessageConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.function.cloudevent.CloudEventMessageBuilder; import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils; -import org.springframework.cloud.function.context.config.JsonMessageConverter; -import org.springframework.integration.kafka.inbound.KafkaMessageSource; import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.listener.KafkaMessageListenerContainer; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.converter.CompositeMessageConverter; -import org.springframework.messaging.support.GenericMessage; -import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MimeTypeUtils; @SpringBootTest @@ -45,7 +32,6 @@ public class DemoApplicationTests { @Test public void test() throws Exception { - Message messageToAMQP = CloudEventMessageBuilder .withData("{\"firstName\":\"John\", \"lastName\":\"Doe\"}".getBytes()) .setSource("https://cloudevent.demo")