Springify: Der Kafka-`Consumer` wird über die Spring-Factory erzeugt
[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 recordHandler(
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       ApplicationProperties applicationProperties)
45   {
46     return new ApplicationRebalanceListener(
47         recordHandler,
48         adderResults,
49         stateRepository,
50         kafkaProperties.getClientId());
51   }
52
53   @Bean
54   public EndlessConsumer<String, Message> endlessConsumer(
55       Consumer<String, Message> kafkaConsumer,
56       ExecutorService executor,
57       ApplicationRebalanceListener rebalanceListener,
58       ApplicationRecordHandler recordHandler,
59       KafkaProperties kafkaProperties,
60       ApplicationProperties applicationProperties)
61   {
62     return
63         new EndlessConsumer<>(
64             executor,
65             kafkaProperties.getClientId(),
66             applicationProperties.getTopic(),
67             kafkaConsumer,
68             rebalanceListener,
69             recordHandler);
70   }
71
72   @Bean
73   public ExecutorService executor()
74   {
75     return Executors.newSingleThreadExecutor();
76   }
77
78   @Bean(destroyMethod = "close")
79   public Consumer<String, Message> kafkaConsumer(ConsumerFactory<String, Message> factory)
80   {
81     return factory.createConsumer();
82   }
83 }