Skip to content

Đặ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