feat(outbox): implement concurrent claim mechanism with UPDATE RETURNING + SKIP LOCKED

- Add migration 0004 to introduce 'claiming' status and timeout index
- Add StatusClaiming to platformevent domain and allow it in Validate()
- Rewrite ListDue as transactional UPDATE ... RETURNING with FOR UPDATE SKIP LOCKED
- Add ReleaseStaleClaims to reset expired claiming events back to retrying
- Worker Start() now runs a 30s ticker for stale claim recovery (5m timeout)
- Update stubEventStore in tests to satisfy new EventStore interface

Refs: D-02
This commit is contained in:
Your Name
2026-05-11 13:16:28 +08:00
parent 771304eabe
commit 34b175b130
5 changed files with 86 additions and 9 deletions

View File

@@ -0,0 +1,11 @@
-- Add 'claiming' status to outbox CHECK constraint and add claim timeout index
ALTER TABLE cs_platform_event_outbox
DROP CONSTRAINT IF EXISTS chk_cs_platform_event_outbox_status;
ALTER TABLE cs_platform_event_outbox
ADD CONSTRAINT chk_cs_platform_event_outbox_status
CHECK (status IN ('pending','retrying','delivered','dead_letter','claiming'));
CREATE INDEX IF NOT EXISTS idx_cs_platform_event_outbox_claiming_timeout
ON cs_platform_event_outbox(status, updated_at);