Đặc tả: Batch & Async Processing Feature
Module: batch (port 8082) + firebaselistener (port 8087)
Status: Production
1. Tổng quan
Module batch xử lý tất cả background tasks: scheduled jobs, JMS listeners, dynamic queue registration. Module firebaselistener xử lý events đến từ Firebase RTDB.
2. JMS Listeners inventory
Prize allocation listeners
| Listener |
Queue |
Concurrency |
JMSPrizeAllocationListener |
queue-prize-allocation-PRIZE |
1-1 |
JMSPrizeForStreamerAllocationListener |
queue-prize-allocation-PRIZE_FOR_STREAMER |
1-1 |
JMSUnlimitedPrizeAllocationListener |
queue-prize-allocation-UNLIMITED |
20-100 |
JMSMissionAllocationListener |
queue-prize-allocation-MISSION |
configurable |
JMSGachaAllocationListener |
queue-prize-allocation-GACHA |
configurable |
JMSPresentBoxAllocationListener |
queue-prize-allocation-PRESENT_BOX |
configurable |
JMSMKPAllocationListener |
queue-prize-allocation-MKP |
configurable |
JMSPresaleAllocationListener |
queue-prize-allocation-PRESALE |
configurable |
JMSNoneAllocationListener |
queue-prize-allocation-NONE |
configurable |
Game/matching listeners
| Listener |
Queue |
JMSMatchingGameModePvPMessageListener |
per-settingId PVP queue |
JMSMatchingGameModePvPMultiMatchMessageListener |
per-settingId PVP multi-match queue |
JMSMatchingGameModeCoopMessageListener |
per-settingId Coop queue |
JMSInvitationListener |
queue-invitation |
JMSMachineViewListener |
machine view queue |
JMSMachineFreeToStartRoomMessageListener |
machine free-to-start queue |
Livestream listeners
| Listener |
Queue |
JMSLivestreamViewerGiftFirebaseUpdateListener |
livestream-viewer-gift-firebase-update (JMSXGroupID) |
Gacha listeners
| Listener |
Queue |
JMSGachaTransferNonNftRewardListener |
gacha non-NFT reward |
JMSGachaTransferNftBountyBallRewardListener |
gacha NFT bounty ball reward |
JMSGachaTransferNftHunterRewardListener |
gacha NFT hunter reward |
JMSGachaTransferNftGauntletRewardListener |
gacha NFT gauntlet reward |
JMSGachaRewardContainerItemDeductListener |
gacha container deduction |
JMSGachaSaveHistoryListener |
gacha history |
Other listeners
| Listener |
Purpose |
JMSTriggerCheckCameraStatus |
IoT camera status check |
JMSTriggerUpdateUserMissionProgress |
Mission progress update |
JMSTriggerCreateLoginBonusPresentBox |
Login bonus present box creation |
JMSAdminCreateMachineMessageListener |
Admin machine creation |
JMSAdminCreateGameModeForStartRoomMessageListener |
Admin game mode creation |
JMSGameModeCreateRoomMessageListener |
Game mode room creation |
JMSHandleDlqMessage |
Dead letter queue handling |
JMSHandleActiveUserListener |
Active user tracking |
JMSListenerRecoveryScheduler |
Listener health recovery |
3. Scheduled jobs inventory
Payment jobs
| Job |
Trigger |
Purpose |
CardCheckoutExpiredConfig |
scheduled |
Expire pending card orders |
DepositCoinByCardExpiredConfig |
scheduled |
Expire card deposit orders |
CryptoCheckoutExpiredConfig |
scheduled |
Expire crypto orders |
DepositCoinByCryptoExpiredConfig |
scheduled |
Expire crypto deposit |
NativeTokenCheckoutExpiredConfig |
scheduled |
Expire native token orders |
CardPaymentConfirmConfig |
scheduled |
Retry card payment confirmation |
TokenTransferConfirmConfig |
scheduled |
Retry token transfer |
Game loop jobs
| Job |
Trigger |
Purpose |
MatchMakingForAllGameModeConfig |
scheduled |
Trigger matchmaking per game mode |
MachineWithWaitingRoomToStartConfig |
scheduled |
Auto-start rooms waiting for machine |
OvertimePingBatchConfig |
scheduled |
Check/expire overtime WebSocket sessions |
NFT jobs
| Job |
Trigger |
Purpose |
NftRentalExpirationCheckBatch |
scheduled |
Process expired rentals |
RestoreLifeGaugeBatchConfig |
scheduled |
Restore hunter life gauge |
CalculateRevenueDailyBatch |
scheduled |
Daily revenue calculation |
Genesis/Presale jobs
| Job |
Trigger |
Purpose |
ExpiredPreOrderGenesisNftConfig |
scheduled |
Expire pre-order genesis NFT |
TrackingProductOrderConfig |
scheduled |
Track product order status |
Leaderboard jobs
| Job |
Trigger |
Purpose |
UpdateEventStatusBatchConfig |
scheduled |
Update event statuses |
UpdateTournamentLeaderboardBatchConfig |
scheduled |
Tournament leaderboard |
UpdateDailyLeaderboardsBatchConfig |
scheduled |
Daily leaderboards |
Maintenance jobs
| Job |
Trigger |
Purpose |
SiteMaintenanceConfig |
scheduled |
Site maintenance mode management |
CleanBatchScheduler |
scheduled |
Cleanup stale data |
DataArchiveBatch |
scheduled |
Archive old records |
DataArchiveSlaveBatch |
scheduled |
Slave archive |
UserMissionProgressResetBatchScheduler |
scheduled |
Reset mission progress |
UserMissionProgressStatusUpdateScheduler |
scheduled |
Update mission status |
DeleteExpiredInvitationConfig |
scheduled |
Delete expired invitations |
CleanUpAttributePointsBatchConfig |
scheduled |
Cleanup attribute points |
DeleteAccountBatchConfig |
scheduled |
Process account deletions |
RemoveRecordPlayGameBatch |
scheduled |
Remove old play history |
ResetUserFreeplayLimit |
scheduled |
Reset freeplay limits |
Other jobs
| Job |
Trigger |
Purpose |
GiftAggregationJob |
fixedDelay |
Gift Redis → ActiveMQ pipeline |
RedisCounterSyncBatchConfig |
scheduled |
Sync Redis counters to DB |
ActiveUserSummaryConfig |
scheduled |
Daily active user summary |
HourlyActiveUserSummaryConfig |
scheduled |
Hourly active user |
MachineUsingRateStatisticalBatch |
scheduled |
Machine usage statistics |
UpdateExchangeRateConfig |
scheduled |
Update crypto exchange rates |
TransactionProfitSummaryConfig |
scheduled |
Transaction profit summary |
CheckCameraStatusConfig |
scheduled |
IoT camera health check |
PrizeDistributionProcessing |
scheduled |
Prize distribution |
4. Dynamic listener registration
| Listener |
Trigger |
Queue pattern |
GameModeCreateRoomJMSListener |
Startup per playableGameBoothSetting |
queue-game-mode-type-pool-{settingId} |
MatchingGameModePvPJMSListener |
Startup per setting |
per-settingId PVP |
MatchingGameModePvPMultiMatchJMSListener |
Startup per setting |
per-settingId PVP multi |
MatchingGameModeCoopJMSListener |
Startup per setting |
per-settingId Coop |
CreateMachineStartRoomJMSListener |
Startup per machine |
per-machineId |
5. Firebase listeners (firebaselistener module)
| Listener |
Firebase path |
Purpose |
FirebaseCommandListener |
commands/{envPrefix} |
Room sync register/cancel commands |
FirebaseEventTypesListener |
event_types/ |
Game event type processing |
FirebaseLivestreamEventListener |
livestreams/{id}/events |
Livestream events |
FirebaseLivestreamsYellPointListener |
livestreams/yell_points_history |
Yell point updates |
6. Functional requirements
| ID |
Requirement |
Chi tiết |
| BATCH-F-01 |
Scheduler isolation |
Mỗi job độc lập, không block nhau |
| BATCH-F-02 |
Dynamic registration |
ProgrammaticEndpointRegistration đăng ký listener tại startup |
| BATCH-F-03 |
Listener recovery |
JMSListenerRecoveryScheduler kiểm tra và khôi phục listener lỗi |
| BATCH-F-04 |
DLQ handling |
JMSHandleDlqMessage xử lý dead letters |
| BATCH-F-05 |
Firebase cleanup |
Sau khi process Firebase event → xóa khỏi RTDB |
| BATCH-F-06 |
Gift ordering |
JMSXGroupID=streamerId đảm bảo gift processing sequential per streamer |
7. Acceptance criteria
- [ ] Tất cả scheduled jobs chạy đúng cadence (không bỏ lỡ)
- [ ] Dynamic queues được tạo khi startup với đúng số lượng machine/setting
- [ ]
JMSListenerRecoveryScheduler phát hiện và khôi phục listener lỗi
- [ ] Firebase events được cleanup sau khi process
- [ ] Gift aggregation pipeline không mất data khi burst load
- [ ] DLQ messages được handle (log + alert hoặc retry)
8. Code references
batch/
jms/ # All JMS listeners
jms/register_destination/ # Dynamic registration
jms/service/ # JMS-side business logic
job/ # All scheduled jobs
firebaselistener/
listener/ # Firebase RTDB listeners