Skip to content

Commit

Permalink
Merge pull request #90 from yomankum-project/feature/88-kafka
Browse files Browse the repository at this point in the history
feature: kafka 설정
  • Loading branch information
hyungzin0309 authored Jul 19, 2024
2 parents fed27da + 8976a43 commit 2cd1414
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 0 deletions.
Binary file removed .DS_Store
Binary file not shown.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.kafka:spring-kafka'

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
Expand Down
52 changes: 52 additions & 0 deletions src/main/java/com/account/yomankum/config/KafkaConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.account.yomankum.config;

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer;
import org.springframework.kafka.support.serializer.JsonDeserializer;

import java.util.HashMap;
import java.util.Map;

@EnableKafka
@Configuration
public class KafkaConfig {

@Value("${kafka.bootstrap-server}")
private String bootstrapServer;
@Value("${kafka.group-id}")
private String groupId;
@Value("${kafka.type-mappings}")
private String typeMappings;

@Bean
public ConsumerFactory<String, Object> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServer);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
// Json 파싱 신뢰 패키지. 개발 환경에서만 * 하고 프로덕션 환경에서는 패키지 지정하기 -> 내 이벤트 패키지
props.put(JsonDeserializer.TRUSTED_PACKAGES, "*");
props.put(JsonDeserializer.TYPE_MAPPINGS, typeMappings);

return new DefaultKafkaConsumerFactory<>(
props,
new StringDeserializer(),
new ErrorHandlingDeserializer<>(new JsonDeserializer<>()));
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, Object> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.account.yomankum.kafka;

import java.time.LocalDateTime;

public record AccountBookInputNotice(
Long id,
String nickname, // 쓰기 시작하는 닉네임
String event,
LocalDateTime eventDatetime
) {

}
17 changes: 17 additions & 0 deletions src/main/java/com/account/yomankum/kafka/KafkaService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.account.yomankum.kafka;

import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class KafkaService {

@KafkaListener(topics = "accountBook_input", groupId = "accountServiceConsumers")
public void listenAccountNotifications(AccountBookInputNotice notice) {
// 처리 로직
System.out.println("Received Account Notification: " + notice.nickname());
}
}

5 changes: 5 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,8 @@ auth:
duration:
signup: 900
password: 900

kafka:
bootstrap-server: localhost:29092
group-id: accountBook
type-mappings: yomankum.kafka.producer.yomankum.api.dto.AccountBookInputNotice:com.account.yomankum.kafka.AccountBookInputNotice

0 comments on commit 2cd1414

Please sign in to comment.