Restructure Cloud Events support to optionally support Cloud Events SDK
This commit is contained in:
@@ -25,13 +25,13 @@ import java.util.function.Function;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.cloud.function.cloudevent.CloudEventAttributesProvider;
|
||||
import org.springframework.cloud.function.cloudevent.CloudEventHeaderEnricher;
|
||||
import org.springframework.cloud.function.cloudevent.CloudEventMessageBuilder;
|
||||
import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils;
|
||||
import org.springframework.cloud.function.web.util.HeaderUtils;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageHeaders;
|
||||
import org.springframework.messaging.support.MessageBuilder;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
@@ -104,9 +104,9 @@ public class CloudeventDemoApplication {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CloudEventAttributesProvider cloudEventAttributesProvider() {
|
||||
return attributes -> {
|
||||
attributes.setSource("https://interface21.com/").setType("com.interface21");
|
||||
public CloudEventHeaderEnricher cloudEventHeaderEnricher() {
|
||||
return headers -> {
|
||||
return headers.setSource("https://interface21.com/").setType("com.interface21");
|
||||
};
|
||||
}
|
||||
|
||||
@@ -129,11 +129,11 @@ public class CloudeventDemoApplication {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Consumer<Message<SpringReleaseEvent>> pojoConsumer(CloudEventAttributesProvider provider, RestTemplateBuilder builder) {
|
||||
public Consumer<Message<SpringReleaseEvent>> pojoConsumer(CloudEventHeaderEnricher enricher, RestTemplateBuilder builder) {
|
||||
return eventMessage -> {
|
||||
Message<?> newMessage = enricher.enrich(CloudEventMessageBuilder.fromMessage(eventMessage)).build(CloudEventMessageUtils.HTTP_ATTR_PREFIX);
|
||||
RequestEntity<SpringReleaseEvent> entity = RequestEntity.post(URI.create("http://foo.com"))
|
||||
.headers(HeaderUtils.fromMessage(
|
||||
new MessageHeaders(CloudEventMessageUtils.generateAttributes(eventMessage, provider))))
|
||||
.headers(HeaderUtils.fromMessage(newMessage.getHeaders()))
|
||||
.body(eventMessage.getPayload());
|
||||
List<String> sourceHeader = entity.getHeaders().get("ce-source");
|
||||
Assert.isTrue(sourceHeader.get(0).equals("https://interface21.com/"), "'source' must be https://interface21.com/");
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.function.Function;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.cloud.function.cloudevent.CloudEventMessageBuilder;
|
||||
import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils;
|
||||
import org.springframework.cloud.function.context.FunctionCatalog;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
@@ -40,9 +41,11 @@ public class CloudeventDemoApplicationFunctionTests {
|
||||
try(ConfigurableApplicationContext context = new SpringApplicationBuilder(CloudeventDemoApplication.class)
|
||||
.web(WebApplicationType.NONE).run()) {
|
||||
FunctionCatalog catalog = context.getBean(FunctionCatalog.class);
|
||||
Message<String> binaryCloudEventMessage = MessageBuilder
|
||||
.withPayload("{\"releaseDate\":\"24-03-2004\", \"releaseName\":\"Spring Framework\", \"version\":\"1.0\"}")
|
||||
.copyHeaders(CloudEventMessageUtils.get("spring.io/spring-event", "com.example.springevent"))
|
||||
|
||||
Message<String> inputMessage = CloudEventMessageBuilder
|
||||
.withData("{\"releaseDate\":\"24-03-2004\", \"releaseName\":\"Spring Framework\", \"version\":\"1.0\"}")
|
||||
.setSource("https://spring.io/spring-event")
|
||||
.setType("com.example.springevent")
|
||||
.build();
|
||||
|
||||
/*
|
||||
@@ -51,16 +54,16 @@ public class CloudeventDemoApplicationFunctionTests {
|
||||
* inside spring-cloud-function.
|
||||
*/
|
||||
Function<Message<String>, Message<String>> asPojoMessage = catalog.lookup("asPOJOMessage");
|
||||
System.out.println(asPojoMessage.apply(binaryCloudEventMessage));
|
||||
System.out.println(asPojoMessage.apply(inputMessage));
|
||||
|
||||
Function<Message<String>, Message<String>> asPojo = catalog.lookup("asPOJO");
|
||||
System.out.println(asPojo.apply(binaryCloudEventMessage));
|
||||
System.out.println(asPojo.apply(inputMessage));
|
||||
|
||||
Function<Message<String>, Message<String>> asString = catalog.lookup("asString");
|
||||
System.out.println(asString.apply(binaryCloudEventMessage));
|
||||
System.out.println(asString.apply(inputMessage));
|
||||
|
||||
Function<Message<String>, Message<String>> asStringMessage = catalog.lookup("asStringMessage");
|
||||
System.out.println(asStringMessage.apply(binaryCloudEventMessage));
|
||||
System.out.println(asStringMessage.apply(inputMessage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,9 +72,11 @@ public class CloudeventDemoApplicationFunctionTests {
|
||||
try(ConfigurableApplicationContext context = new SpringApplicationBuilder(CloudeventDemoApplication.class)
|
||||
.web(WebApplicationType.NONE).run()) {
|
||||
FunctionCatalog catalog = context.getBean(FunctionCatalog.class);
|
||||
Message<String> binaryCloudEventMessage = MessageBuilder
|
||||
.withPayload("{\"releaseDate\":\"24-03-2004\", \"releaseName\":\"Spring Framework\", \"version\":\"1.0\"}")
|
||||
.copyHeaders(CloudEventMessageUtils.get("spring.io/spring-event", "com.example.springevent"))
|
||||
|
||||
Message<String> inputMessage = CloudEventMessageBuilder
|
||||
.withData("{\"releaseDate\":\"24-03-2004\", \"releaseName\":\"Spring Framework\", \"version\":\"1.0\"}")
|
||||
.setSource("https://spring.io/spring-event")
|
||||
.setType("com.example.springevent")
|
||||
.build();
|
||||
|
||||
/*
|
||||
@@ -80,7 +85,7 @@ public class CloudeventDemoApplicationFunctionTests {
|
||||
* inside spring-cloud-function.
|
||||
*/
|
||||
Function<Message<String>, Message<String>> asPojoMessage = catalog.lookup("consumeAndProduceCloudEvent");
|
||||
System.out.println(asPojoMessage.apply(binaryCloudEventMessage));
|
||||
System.out.println(asPojoMessage.apply(inputMessage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,9 +94,11 @@ public class CloudeventDemoApplicationFunctionTests {
|
||||
try(ConfigurableApplicationContext context = new SpringApplicationBuilder(CloudeventDemoApplication.class)
|
||||
.web(WebApplicationType.NONE).run()) {
|
||||
FunctionCatalog catalog = context.getBean(FunctionCatalog.class);
|
||||
Message<String> binaryCloudEventMessage = MessageBuilder
|
||||
.withPayload("{\"releaseDate\":\"24-03-2004\", \"releaseName\":\"Spring Framework\", \"version\":\"1.0\"}")
|
||||
.copyHeaders(CloudEventMessageUtils.get("spring.io/spring-event", "com.example.springevent"))
|
||||
|
||||
Message<String> inputMessage = CloudEventMessageBuilder
|
||||
.withData("{\"releaseDate\":\"24-03-2004\", \"releaseName\":\"Spring Framework\", \"version\":\"1.0\"}")
|
||||
.setSource("https://spring.io/spring-event")
|
||||
.setType("com.example.springevent")
|
||||
.build();
|
||||
|
||||
/*
|
||||
@@ -100,7 +107,7 @@ public class CloudeventDemoApplicationFunctionTests {
|
||||
* inside spring-cloud-function.
|
||||
*/
|
||||
Function<Message<String>, Message<String>> asPojoMessage = catalog.lookup("consumeAndProduceCloudEventAsPojoToPojo");
|
||||
System.out.println(asPojoMessage.apply(binaryCloudEventMessage));
|
||||
System.out.println(asPojoMessage.apply(inputMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user