|
16 | 16 |
|
17 | 17 | package io.spring.cloudevent;
|
18 | 18 |
|
| 19 | +import java.net.URI; |
| 20 | +import java.util.List; |
19 | 21 | import java.util.Map;
|
20 | 22 | import java.util.function.Consumer;
|
21 | 23 | import java.util.function.Function;
|
22 | 24 |
|
| 25 | +import org.springframework.beans.factory.annotation.Value; |
23 | 26 | import org.springframework.boot.SpringApplication;
|
24 | 27 | import org.springframework.boot.autoconfigure.SpringBootApplication;
|
| 28 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
| 29 | +import org.springframework.boot.web.client.RestTemplateBuilder; |
25 | 30 | import org.springframework.cloud.function.cloudevent.CloudEventAttributes;
|
26 | 31 | import org.springframework.cloud.function.cloudevent.CloudEventAttributesProvider;
|
27 | 32 | import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils;
|
| 33 | +import org.springframework.cloud.function.web.util.HeaderUtils; |
28 | 34 | import org.springframework.context.annotation.Bean;
|
| 35 | +import org.springframework.http.RequestEntity; |
29 | 36 | import org.springframework.messaging.Message;
|
| 37 | +import org.springframework.messaging.MessageHeaders; |
30 | 38 | import org.springframework.messaging.support.MessageBuilder;
|
| 39 | +import org.springframework.util.Assert; |
| 40 | +import org.springframework.web.client.RestTemplate; |
31 | 41 |
|
32 | 42 | /**
|
33 | 43 | * Sample application that demonstrates how user functions can be triggered by cloud event.
|
@@ -120,11 +130,33 @@ public Function<SpringReleaseEvent, SpringReleaseEvent> consumeAndProduceCloudEv
|
120 | 130 | };
|
121 | 131 | }
|
122 | 132 |
|
123 |
| -// @Bean |
124 |
| -// public Consumer<SpringReleaseEvent> pojoConsumer(CloudEventAttributesProvider provider) { |
125 |
| -// return event -> { |
126 |
| -// |
127 |
| -// provider.generateDefaultCloudEventHeaders(attributes); |
128 |
| -// }; |
129 |
| -// } |
| 133 | + @Bean |
| 134 | + public Consumer<Message<SpringReleaseEvent>> pojoConsumer(CloudEventAttributesProvider provider, RestTemplateBuilder builder) { |
| 135 | + return eventMessage -> { |
| 136 | + RequestEntity<SpringReleaseEvent> entity = RequestEntity.post(URI.create("http://foo.com")) |
| 137 | + .headers(HeaderUtils.fromMessage( |
| 138 | + new MessageHeaders(CloudEventMessageUtils.generateAttributesWithProvider(eventMessage.getHeaders(), provider)))) |
| 139 | + .body(eventMessage.getPayload()); |
| 140 | + List<String> sourceHeader = entity.getHeaders().get("ce-source"); |
| 141 | + List<String> typeHeader = entity.getHeaders().get("ce-type"); |
| 142 | + Assert.isTrue(sourceHeader.get(0).equals("https://interface21.com/"), "'source' must be https://interface21.com/"); |
| 143 | + Assert.isTrue(typeHeader.get(0).equals("com.interface21"), "'source' must be com.interface21"); |
| 144 | + }; |
| 145 | + } |
| 146 | + |
| 147 | + |
| 148 | + @Bean |
| 149 | + @ConditionalOnExpression("'${K_SINK:}'!=''") |
| 150 | + public Consumer<Message<Map<String, Object>>> sink(CloudEventAttributesProvider provider, |
| 151 | + RestTemplateBuilder builder, @Value("${K_SINK}") String url) { |
| 152 | + RestTemplate client = builder.build(); |
| 153 | + return eventMessage -> { |
| 154 | + RequestEntity<Map<String, Object>> entity = RequestEntity.post(URI.create("http://foo.com")) |
| 155 | + .headers(HeaderUtils.fromMessage( |
| 156 | + new MessageHeaders(CloudEventMessageUtils.generateAttributesWithProvider(eventMessage.getHeaders(), provider)))) |
| 157 | + .body(eventMessage.getPayload()); |
| 158 | + client.exchange(entity, byte[].class); |
| 159 | + }; |
| 160 | + } |
| 161 | + |
130 | 162 | }
|
0 commit comments