πŸ” λͺ©μ°¨


πŸ“ 흐름도

πŸ”Ήμ•Œλ¦Ό κΈ°λŠ₯ 전체 흐름

λ„λ©”μΈμ—μ„œ λ°œμƒν•œ 이벀트λ₯Ό μ‘°ν•©ν•˜μ—¬ μœ μ €μ—κ²Œ μ•Œλ¦Ό λ°œμ†‘

μ•Œλ¦Ό_흐름도.png


πŸ”Ή Message Hub 전체 흐름

도메인 λ©”μ„Έμ§€λ₯Ό λ°›μ•„μ„œ λ©”μ„Έμ§€ μ‘°ν•© 및 μ €μž₯ ν›„ μ•Œλ¦Ό λ„λ©”μΈμœΌλ‘œ 전달. μ €μž₯된 λ©”μ„Έμ§€λŠ” μŠ€μΌ€μ€„λŸ¬λ‘œ μ˜ˆμ•½ λ°œμ†‘μ— μ‚¬μš© ν›„ μ‚­μ œ.

MessageHub흐름.png


πŸ—‚οΈ νŒ¨ν‚€μ§€ ꡬ쑰 및 클래슀 μ—­ν• 

messagehub
 β”œβ”€β”€ application
 β”‚   β”œβ”€β”€ dto
 β”‚   β”‚   β”œβ”€β”€ MeetingReminderMessage.class
 β”‚   β”‚   β”œβ”€β”€ MessageDto.class
 β”‚   β”‚   └── ScoreRangeDto.class
 β”‚   β”œβ”€β”€ handler
 β”‚   β”‚   └── EventRoutingHandler.class
 β”‚   β”œβ”€β”€ provider
 β”‚   β”‚   β”œβ”€β”€ MessageProvider.class
 β”‚   β”‚   └── TargetUserProvider.class
 β”‚   β”œβ”€β”€ scheduler
 β”‚   β”‚   └── ReminderPollingScheduler.class
 β”‚   β”œβ”€β”€ service
 β”‚   β”‚   └── MessageHubRedisService.class
 β”‚   └── util
 β”‚       β”œβ”€β”€ MessageFormatUtil.class
 β”‚       └── ReminderKeyUtil.class
 β”œβ”€β”€ enums
 β”‚   β”œβ”€β”€ AlarmType.class
 β”‚   β”œβ”€β”€ MessageKey.class
 β”‚   β”œβ”€β”€ MessageType.class
 β”‚   └── UuidStatus.class
 β”œβ”€β”€ event
 β”‚   └── rabbitmq
 β”‚       β”œβ”€β”€ config
 β”‚       β”‚   β”œβ”€β”€ MessageHubExchangeConfig.class
 β”‚       β”‚   β”œβ”€β”€ MessageHubQueueConfig.class
 β”‚       β”‚   └── MessageHubRabbitConfig.class
 β”‚       β”œβ”€β”€ consumer
 β”‚       β”‚   └── MessageHubConsumer.class
 β”‚       └── producer
 β”‚           └── MessageHubProducer.class
 └── infra
     └── redis
         β”œβ”€β”€ config
         β”‚   └── MessageHubRedisScriptConfig.class
         └── MessageHubRedisRepository.class

πŸ”Ή application

λ„λ©”μΈμ˜ 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 λͺ¨μ—¬ μžˆλŠ” 계측.

클래슀 μ—­ν• 
EventRoutingHandler 전체 λ©”μ‹œμ§€ 흐름 쑰율, λ©”μ‹œμ§€ 도메인별 1μ°¨ 뢄리.
Consumer 이벀트λ₯Ό λ©”μ‹œμ§€ νƒ€μž…μ— 따라 λΆ„κΈ° μ²˜λ¦¬ν•˜κ³  Provider둜 전달
MessageProvider 도메인별 λ©”μ‹œμ§€ 데이터λ₯Ό μ„ΈλΆ„ν™”/μ‘°ν•©.
Redis μ €μž₯/μ‚­μ œλŠ” MessageHubRedisService,
μœ μ € μ‘°νšŒλŠ” TargetUserProvider둜 μœ„μž„
TargetUserProvider λ©”μ‹œμ§€ λ°œμ†‘ λŒ€μƒ μœ μ €(μˆ˜μ‹ μž) 정보λ₯Ό 쑰회/λ§€ν•‘
ReminderPollingScheduler Redis에 μ €μž₯된 μ˜ˆμ•½ μ•Œλ¦Ό λ©”μ‹œμ§€λ₯Ό 주기적으둜 ν™•μΈν•˜κ³  λ°œμ†‘ 트리거 μ‹€ν–‰
MessageHubRedisService Redis 기반 λͺ¨μž„ μ•Œλ¦Ό μ˜ˆμ•½Β·μ‘°νšŒΒ·μ‚­μ œΒ·λ§ˆν‚Ή 및 UUID 쀑볡 확인 처리.
30λΆ„ μ „/ν•˜λ£¨ μ „ μ•Œλ¦Ό μ €μž₯, λ°œμ†‘ λŒ€μƒ 쑰회, λ°œμ†‘ ν›„ 쀑볡 λ°©μ§€ λ§ˆν‚Ή,
였래된 데이터 정리 κΈ°λŠ₯ 포함
MessageFormatUtil λ©”μ‹œμ§€ ν‚€ + νŒŒλΌλ―Έν„° 기반으둜 μ‹€μ œ μ•Œλ¦Ό λ©”μ‹œμ§€ 생성. messages.properties와 연동해 λ°œμ†‘ λ©”μ‹œμ§€ 관리
ReminderKeyUtil Redis ZSet/Hash Key 생성 κ·œμΉ™ 관리