|
1 | | -package org.myteam.server.chat.config; |
2 | | - |
3 | | - |
4 | | -import org.apache.kafka.clients.admin.AdminClientConfig; |
5 | | -import org.apache.kafka.clients.consumer.ConsumerConfig; |
6 | | -import org.apache.kafka.clients.producer.ProducerConfig; |
7 | | -import org.apache.kafka.common.serialization.StringDeserializer; |
8 | | -import org.apache.kafka.common.serialization.StringSerializer; |
9 | | -import org.myteam.server.chat.domain.Chat; |
10 | | -import org.springframework.context.annotation.Bean; |
11 | | -import org.springframework.context.annotation.Configuration; |
12 | | -import org.springframework.kafka.annotation.EnableKafka; |
13 | | -import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; |
14 | | -import org.springframework.kafka.core.*; |
15 | | -import org.springframework.kafka.support.serializer.JsonDeserializer; |
16 | | -import org.springframework.kafka.support.serializer.JsonSerializer; |
17 | | - |
18 | | -import java.util.HashMap; |
19 | | -import java.util.Map; |
20 | | - |
21 | | -@EnableKafka |
22 | | -@Configuration |
23 | | -public class KafkaConfig { |
24 | | - |
25 | | - private static final String BOOTSTRAP_SERVERS = "kafka:9092"; |
26 | | - private static final String DEFAULT_GROUP_ID = "chat-group"; |
27 | | - |
28 | | - @Bean |
29 | | - public KafkaAdmin kafkaAdmin() { |
30 | | - Map<String, Object> configs = new HashMap<>(); |
31 | | - configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); |
32 | | - return new KafkaAdmin(configs); |
33 | | - } |
34 | | - |
35 | | - /** |
36 | | - * Kafka ProducerFactory를 생성하는 Bean 메서드 |
37 | | - */ |
38 | | - @Bean |
39 | | - public ProducerFactory<String, Chat> producerFactory() { |
40 | | - return new DefaultKafkaProducerFactory<>(producerConfigurations()); |
41 | | - } |
42 | | - |
43 | | - /** |
44 | | - * Kafka Producer 구성을 위한 설정값들을 포함한 맵을 반환하는 메서드 |
45 | | - */ |
46 | | - @Bean |
47 | | - public Map<String, Object> producerConfigurations() { |
48 | | - Map<String, Object> producerConfigurations = new HashMap<>(); |
49 | | - |
50 | | - producerConfigurations.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); |
51 | | - producerConfigurations.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); |
52 | | - producerConfigurations.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); |
53 | | - producerConfigurations.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false); // JSON 타입 헤더 제거 (선택사항) |
54 | | - |
55 | | - return producerConfigurations; |
56 | | - } |
57 | | - |
58 | | - /** |
59 | | - * KafkaTemplate을 생성하는 Bean 메서드 |
60 | | - */ |
61 | | - @Bean |
62 | | - public KafkaTemplate<String, Chat> kafkaTemplate() { |
63 | | - return new KafkaTemplate<>(producerFactory()); |
64 | | - } |
65 | | - |
66 | | - /** |
67 | | - * Kafka ConsumerFactory를 생성하는 Bean 메서드 |
68 | | - */ |
69 | | - @Bean |
70 | | - public ConsumerFactory<String, Chat> consumerFactory() { |
71 | | - JsonDeserializer<Chat> deserializer = new JsonDeserializer<>(Chat.class); |
72 | | - deserializer.addTrustedPackages("*"); // 모든 패키지 신뢰 (필요 시 제한적으로 변경) |
73 | | - |
74 | | - Map<String, Object> consumerConfigurations = Map.of( |
75 | | - ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS, |
76 | | - ConsumerConfig.GROUP_ID_CONFIG, DEFAULT_GROUP_ID, |
77 | | - ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class, |
78 | | - ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, deserializer, |
79 | | - ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest" |
80 | | - ); |
81 | | - |
82 | | - return new DefaultKafkaConsumerFactory<>(consumerConfigurations, new StringDeserializer(), deserializer); |
83 | | - } |
84 | | - |
85 | | - /** |
86 | | - * KafkaListener 컨테이너 팩토리를 생성하는 Bean 메서드 |
87 | | - */ |
88 | | - @Bean |
89 | | - public ConcurrentKafkaListenerContainerFactory<String, Chat> kafkaListenerContainerFactory() { |
90 | | - ConcurrentKafkaListenerContainerFactory<String, Chat> factory = new ConcurrentKafkaListenerContainerFactory<>(); |
91 | | - factory.setConsumerFactory(consumerFactory()); |
92 | | - |
93 | | - factory.setConcurrency(3); // 병렬 처리 설정 (기본값 1) |
94 | | - factory.getContainerProperties().setPollTimeout(3000L); // 폴링 시간 설정 (선택사항) |
95 | | - |
96 | | - return factory; |
97 | | - } |
98 | | -} |
| 1 | +//package org.myteam.server.chat.config; |
| 2 | +// |
| 3 | +// |
| 4 | +//import org.apache.kafka.clients.admin.AdminClientConfig; |
| 5 | +//import org.apache.kafka.clients.consumer.ConsumerConfig; |
| 6 | +//import org.apache.kafka.clients.producer.ProducerConfig; |
| 7 | +//import org.apache.kafka.common.serialization.StringDeserializer; |
| 8 | +//import org.apache.kafka.common.serialization.StringSerializer; |
| 9 | +//import org.myteam.server.chat.domain.Chat; |
| 10 | +//import org.springframework.context.annotation.Bean; |
| 11 | +//import org.springframework.context.annotation.Configuration; |
| 12 | +//import org.springframework.kafka.annotation.EnableKafka; |
| 13 | +//import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; |
| 14 | +//import org.springframework.kafka.core.*; |
| 15 | +//import org.springframework.kafka.support.serializer.JsonDeserializer; |
| 16 | +//import org.springframework.kafka.support.serializer.JsonSerializer; |
| 17 | +// |
| 18 | +//import java.util.HashMap; |
| 19 | +//import java.util.Map; |
| 20 | +// |
| 21 | +//@EnableKafka |
| 22 | +//@Configuration |
| 23 | +//public class KafkaConfig { |
| 24 | +// |
| 25 | +// private static final String BOOTSTRAP_SERVERS = "kafka:9092"; |
| 26 | +// private static final String DEFAULT_GROUP_ID = "chat-group"; |
| 27 | +// |
| 28 | +// @Bean |
| 29 | +// public KafkaAdmin kafkaAdmin() { |
| 30 | +// Map<String, Object> configs = new HashMap<>(); |
| 31 | +// configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); |
| 32 | +// return new KafkaAdmin(configs); |
| 33 | +// } |
| 34 | +// |
| 35 | +// /** |
| 36 | +// * Kafka ProducerFactory를 생성하는 Bean 메서드 |
| 37 | +// */ |
| 38 | +// @Bean |
| 39 | +// public ProducerFactory<String, Chat> producerFactory() { |
| 40 | +// return new DefaultKafkaProducerFactory<>(producerConfigurations()); |
| 41 | +// } |
| 42 | +// |
| 43 | +// /** |
| 44 | +// * Kafka Producer 구성을 위한 설정값들을 포함한 맵을 반환하는 메서드 |
| 45 | +// */ |
| 46 | +// @Bean |
| 47 | +// public Map<String, Object> producerConfigurations() { |
| 48 | +// Map<String, Object> producerConfigurations = new HashMap<>(); |
| 49 | +// |
| 50 | +// producerConfigurations.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); |
| 51 | +// producerConfigurations.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); |
| 52 | +// producerConfigurations.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); |
| 53 | +// producerConfigurations.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false); // JSON 타입 헤더 제거 (선택사항) |
| 54 | +// |
| 55 | +// return producerConfigurations; |
| 56 | +// } |
| 57 | +// |
| 58 | +// /** |
| 59 | +// * KafkaTemplate을 생성하는 Bean 메서드 |
| 60 | +// */ |
| 61 | +// @Bean |
| 62 | +// public KafkaTemplate<String, Chat> kafkaTemplate() { |
| 63 | +// return new KafkaTemplate<>(producerFactory()); |
| 64 | +// } |
| 65 | +// |
| 66 | +// /** |
| 67 | +// * Kafka ConsumerFactory를 생성하는 Bean 메서드 |
| 68 | +// */ |
| 69 | +// @Bean |
| 70 | +// public ConsumerFactory<String, Chat> consumerFactory() { |
| 71 | +// JsonDeserializer<Chat> deserializer = new JsonDeserializer<>(Chat.class); |
| 72 | +// deserializer.addTrustedPackages("*"); // 모든 패키지 신뢰 (필요 시 제한적으로 변경) |
| 73 | +// |
| 74 | +// Map<String, Object> consumerConfigurations = Map.of( |
| 75 | +// ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS, |
| 76 | +// ConsumerConfig.GROUP_ID_CONFIG, DEFAULT_GROUP_ID, |
| 77 | +// ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class, |
| 78 | +// ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, deserializer, |
| 79 | +// ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest" |
| 80 | +// ); |
| 81 | +// |
| 82 | +// return new DefaultKafkaConsumerFactory<>(consumerConfigurations, new StringDeserializer(), deserializer); |
| 83 | +// } |
| 84 | +// |
| 85 | +// /** |
| 86 | +// * KafkaListener 컨테이너 팩토리를 생성하는 Bean 메서드 |
| 87 | +// */ |
| 88 | +// @Bean |
| 89 | +// public ConcurrentKafkaListenerContainerFactory<String, Chat> kafkaListenerContainerFactory() { |
| 90 | +// ConcurrentKafkaListenerContainerFactory<String, Chat> factory = new ConcurrentKafkaListenerContainerFactory<>(); |
| 91 | +// factory.setConsumerFactory(consumerFactory()); |
| 92 | +// |
| 93 | +// factory.setConcurrency(3); // 병렬 처리 설정 (기본값 1) |
| 94 | +// factory.getContainerProperties().setPollTimeout(3000L); // 폴링 시간 설정 (선택사항) |
| 95 | +// |
| 96 | +// return factory; |
| 97 | +// } |
| 98 | +//} |
0 commit comments