카프카 스프링 부트에서 동적으로 토픽 생성
토픽을 동적으로 생성하는 방법 중 하나는 Kafka Admin Client를 사용하는 것입니다. 아파치 카프카는 자바로 개발된 Admin Client API를 제공하며, 이 API를 통해 토픽을 생성하고 관리할 수 있습니다. 예를 들어, Java로 작성된 코드에서 Admin Client API를 사용하여 특정 이벤트에 대한 새로운 토픽을 생성할 수 있습니다.
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewTopic;
import java.util.Properties;
public class DynamicTopicCreation {
public static void main(String[] args) {
// Kafka 서버 설정
Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "your_bootstrap_servers");
// Admin Client 생성
try (AdminClient adminClient = AdminClient.create(properties)) {
// 새로운 토픽 생성
String topicName = "your_dynamic_topic";
NewTopic newTopic = new NewTopic(topicName, 1, (short) 1);
adminClient.createTopics(Collections.singleton(newTopic));
} catch (Exception e) {
e.printStackTrace();
}
}
}
목표 기능 정리
행사 시간 삭제 시 예매 테이블도 행사 시간에 맞게 삭제 되게티켓 생성이 됐을경우 (결제완료) 일 때, 예매도 결제 상태로 변경하면 됨환불을 했을때 티켓을 삭제 하고, 예매 결제 상태 변경 (구현완료)- 이 단계는 마지막 단계이므로 지금 처리 안해도 됨
- 행사 시간 선택 후 예매하기 버튼 눌렀을 때 대기열에 진입이 됨 → 좌석 보여주기
- 카프카 토픽 생성 시점은 행사 시간을 생성 했을 때
행사 종료시간엔 해당 토픽들을 삭제
레디스 키 만료 됐을 때 PostgreSQL 업데이트
@Component
public class RedisKeyExpiredListener extends KeyExpirationEventMessageListener {
private final TicketService ticketService;
public RedisKeyExpiredListener(RedisMessageListenerContainer listenerContainer, TicketService ticketService) {
super(listenerContainer);
this.ticketService = ticketService;
}
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = new String(message.getBody());
if (expiredKey.startsWith("seat_lock:")) {
ticketService.updateReservationStatusWithUnLocked(expiredKey);
}
}
}
'항해99' 카테고리의 다른 글
항해99 실전 프로젝트 (17일차) (0) | 2024.02.17 |
---|---|
항해99 실전 프로젝트 (16일차) (0) | 2024.02.16 |
항해99 실전 프로젝트 (14일차) (0) | 2024.02.15 |
항해99 실전 프로젝트 (13일차) (0) | 2024.02.13 |
항해99 실전 프로젝트 (12일차) (0) | 2024.02.08 |
카프카 스프링 부트에서 동적으로 토픽 생성
토픽을 동적으로 생성하는 방법 중 하나는 Kafka Admin Client를 사용하는 것입니다. 아파치 카프카는 자바로 개발된 Admin Client API를 제공하며, 이 API를 통해 토픽을 생성하고 관리할 수 있습니다. 예를 들어, Java로 작성된 코드에서 Admin Client API를 사용하여 특정 이벤트에 대한 새로운 토픽을 생성할 수 있습니다.
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewTopic;
import java.util.Properties;
public class DynamicTopicCreation {
public static void main(String[] args) {
// Kafka 서버 설정
Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "your_bootstrap_servers");
// Admin Client 생성
try (AdminClient adminClient = AdminClient.create(properties)) {
// 새로운 토픽 생성
String topicName = "your_dynamic_topic";
NewTopic newTopic = new NewTopic(topicName, 1, (short) 1);
adminClient.createTopics(Collections.singleton(newTopic));
} catch (Exception e) {
e.printStackTrace();
}
}
}
목표 기능 정리
행사 시간 삭제 시 예매 테이블도 행사 시간에 맞게 삭제 되게티켓 생성이 됐을경우 (결제완료) 일 때, 예매도 결제 상태로 변경하면 됨환불을 했을때 티켓을 삭제 하고, 예매 결제 상태 변경 (구현완료)- 이 단계는 마지막 단계이므로 지금 처리 안해도 됨
- 행사 시간 선택 후 예매하기 버튼 눌렀을 때 대기열에 진입이 됨 → 좌석 보여주기
- 카프카 토픽 생성 시점은 행사 시간을 생성 했을 때
행사 종료시간엔 해당 토픽들을 삭제
레디스 키 만료 됐을 때 PostgreSQL 업데이트
@Component
public class RedisKeyExpiredListener extends KeyExpirationEventMessageListener {
private final TicketService ticketService;
public RedisKeyExpiredListener(RedisMessageListenerContainer listenerContainer, TicketService ticketService) {
super(listenerContainer);
this.ticketService = ticketService;
}
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = new String(message.getBody());
if (expiredKey.startsWith("seat_lock:")) {
ticketService.updateReservationStatusWithUnLocked(expiredKey);
}
}
}
'항해99' 카테고리의 다른 글
항해99 실전 프로젝트 (17일차) (0) | 2024.02.17 |
---|---|
항해99 실전 프로젝트 (16일차) (0) | 2024.02.16 |
항해99 실전 프로젝트 (14일차) (0) | 2024.02.15 |
항해99 실전 프로젝트 (13일차) (0) | 2024.02.13 |
항해99 실전 프로젝트 (12일차) (0) | 2024.02.08 |