X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fwordcount%2Fsplitter%2FSplitterApplication.java;h=fd3becda113fcf10bb3192b01ba8df73e3a1090f;hb=b198c660c6add81b3a8c9429467edec8d08dddd8;hp=d46a7cd4c4b3fd9e2b73f251d9e74f44f93772c7;hpb=d5f54354b2b44d125493c830bf0475f7992ee395;p=demos%2Fkafka%2Fwordcount diff --git a/src/main/java/de/juplo/kafka/wordcount/splitter/SplitterApplication.java b/src/main/java/de/juplo/kafka/wordcount/splitter/SplitterApplication.java index d46a7cd..fd3becd 100644 --- a/src/main/java/de/juplo/kafka/wordcount/splitter/SplitterApplication.java +++ b/src/main/java/de/juplo/kafka/wordcount/splitter/SplitterApplication.java @@ -4,20 +4,70 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; - -import java.time.Clock; +import org.springframework.context.annotation.ImportResource; +import org.springframework.expression.common.LiteralExpression; +import org.springframework.integration.annotation.InboundChannelAdapter; +import org.springframework.integration.annotation.ServiceActivator; +import org.springframework.integration.config.EnableIntegration; +import org.springframework.integration.kafka.inbound.KafkaMessageSource; +import org.springframework.integration.kafka.outbound.KafkaProducerMessageHandler; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.listener.ConsumerProperties; +import org.springframework.kafka.support.KafkaHeaders; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.MessageHandler; +import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.support.ChannelInterceptor; @SpringBootApplication @EnableConfigurationProperties(SplitterApplicationProperties.class) +@EnableIntegration +@ImportResource("classpath:integration.xml") public class SplitterApplication { @Bean - Clock clock() + ChannelInterceptor keyInterceptor () + { + return new ChannelInterceptor() + { + @Override + public Message preSend(Message message, MessageChannel channel) + { + MessageHeaders headers = message.getHeaders(); + Object key = headers.get(KafkaHeaders.RECEIVED_MESSAGE_KEY); + return + MessageBuilder + .fromMessage(message) + .setHeader(KafkaHeaders.MESSAGE_KEY, key) + .build(); + } + }; + } + + @InboundChannelAdapter(channel = "recordings") + @Bean + KafkaMessageSource source( + ConsumerFactory cf, + SplitterApplicationProperties properties) { - return Clock.systemDefaultZone(); + return new KafkaMessageSource<>(cf, new ConsumerProperties(properties.getInputTopic())); } + @Bean + @ServiceActivator(inputChannel = "words") + MessageHandler handler( + KafkaTemplate kafkaTemplate, + SplitterApplicationProperties properties) + { + KafkaProducerMessageHandler handler = + new KafkaProducerMessageHandler<>(kafkaTemplate); + handler.setTopicExpression(new LiteralExpression(properties.getOutputTopic())); + return handler; + } public static void main(String[] args) {