08c827c3ae1ed03524bbaf3f5b9e82b68de84eb0
[demos/kafka/training] / src / main / java / de / juplo / kafka / ApplicationConfiguration.java
1 package de.juplo.kafka;
2
3 import org.apache.kafka.clients.consumer.Consumer;
4 import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
5 import org.springframework.boot.context.properties.EnableConfigurationProperties;
6 import org.springframework.context.annotation.Bean;
7 import org.springframework.context.annotation.Configuration;
8
9 import java.util.Optional;
10 import org.springframework.kafka.core.ConsumerFactory;
11
12 import java.util.concurrent.ExecutorService;
13 import java.util.concurrent.Executors;
14
15
16 @Configuration
17 @EnableConfigurationProperties({ KafkaProperties.class, ApplicationProperties.class })
18 public class ApplicationConfiguration
19 {
20   @Bean
21   public ApplicationRecordHandler applicationRecordHandler(
22       AdderResults adderResults,
23       KafkaProperties kafkaProperties,
24       ApplicationProperties applicationProperties)
25   {
26     return new ApplicationRecordHandler(
27         adderResults,
28         Optional.ofNullable(applicationProperties.getThrottle()),
29         kafkaProperties.getClientId());
30   }
31
32   @Bean
33   public AdderResults adderResults()
34   {
35     return new AdderResults();
36   }
37
38   @Bean
39   public ApplicationRebalanceListener rebalanceListener(
40       ApplicationRecordHandler recordHandler,
41       AdderResults adderResults,
42       StateRepository stateRepository,
43       KafkaProperties kafkaProperties)
44   {
45     return new ApplicationRebalanceListener(
46         recordHandler,
47         adderResults,
48         stateRepository,
49         kafkaProperties.getClientId());
50   }
51
52   @Bean
53   public EndlessConsumer<String, Message> endlessConsumer(
54       Consumer<String, Message> kafkaConsumer,
55       ExecutorService executor,
56       ApplicationRebalanceListener rebalanceListener,
57       RecordHandler recordHandler,
58       KafkaProperties kafkaProperties,
59       ApplicationProperties applicationProperties)
60   {
61     return
62         new EndlessConsumer<>(
63             executor,
64             kafkaProperties.getClientId(),
65             applicationProperties.getTopic(),
66             kafkaConsumer,
67             rebalanceListener,
68             recordHandler);
69   }
70
71   @Bean
72   public ExecutorService executor()
73   {
74     return Executors.newSingleThreadExecutor();
75   }
76
77   @Bean(destroyMethod = "close")
78   public Consumer<String, Message> kafkaConsumer(ConsumerFactory<String, Message> factory)
79   {
80     return factory.createConsumer();
81   }
82 }