CREATE DATABASE IF NOT EXISTS baiyue_event_bridge DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE baiyue_event_bridge; CREATE TABLE IF NOT EXISTS bridge_outbox ( event_id VARCHAR(128) NOT NULL COMMENT '事件全局标识', idempotency_key VARCHAR(191) NOT NULL COMMENT '发送幂等键', event_type VARCHAR(64) NOT NULL COMMENT '事件类型', event_version INT NOT NULL COMMENT '事件契约版本', source_region VARCHAR(32) NOT NULL COMMENT '来源区域', target_region VARCHAR(32) NOT NULL COMMENT '目标区域', customer_id VARCHAR(128) NOT NULL COMMENT '租户标识', aggregate_type VARCHAR(64) NOT NULL COMMENT '聚合类型', aggregate_id VARCHAR(128) NOT NULL COMMENT '聚合标识', aggregate_version BIGINT NOT NULL COMMENT '聚合版本', handover_version BIGINT NULL COMMENT '跨区交接版本', trace_id VARCHAR(128) NOT NULL COMMENT '链路标识', correlation_id VARCHAR(128) NOT NULL COMMENT '业务关联标识', causation_id VARCHAR(128) NULL COMMENT '上游事件标识', occurred_at DATETIME(3) NOT NULL COMMENT '业务事实发生时间', payload_hash VARCHAR(71) NOT NULL COMMENT '规范化负载摘要', payload_json JSON NOT NULL COMMENT '事件负载', status VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态', retry_count INT NOT NULL DEFAULT 0 COMMENT '已重试次数', next_retry_at DATETIME(3) NULL COMMENT '下次重试时间', lease_owner VARCHAR(128) NULL COMMENT '租约持有者', lease_until DATETIME(3) NULL COMMENT '租约截止时间', last_error VARCHAR(1000) NULL COMMENT '最后错误', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', delivered_at DATETIME(3) NULL COMMENT '投递成功时间', PRIMARY KEY (event_id), UNIQUE KEY uk_bridge_outbox_idempotency (idempotency_key), KEY idx_bridge_outbox_schedule (target_region, status, next_retry_at, lease_until) ) ENGINE=InnoDB COMMENT='跨区域事件待投递箱'; CREATE TABLE IF NOT EXISTS bridge_inbox ( event_id VARCHAR(128) NOT NULL COMMENT '事件全局标识', idempotency_key VARCHAR(191) NOT NULL COMMENT '来源区域与业务eventKey组成的接收幂等键', event_type VARCHAR(64) NOT NULL COMMENT '事件类型', event_version INT NOT NULL COMMENT '事件契约版本', source_region VARCHAR(32) NOT NULL COMMENT '来源区域', target_region VARCHAR(32) NOT NULL COMMENT '目标区域', customer_id VARCHAR(128) NOT NULL COMMENT '租户标识', aggregate_type VARCHAR(64) NOT NULL COMMENT '聚合类型', aggregate_id VARCHAR(128) NOT NULL COMMENT '聚合标识', aggregate_version BIGINT NOT NULL COMMENT '聚合版本', handover_version BIGINT NULL COMMENT '跨区交接版本', trace_id VARCHAR(128) NOT NULL COMMENT '链路标识', correlation_id VARCHAR(128) NOT NULL COMMENT '业务关联标识', causation_id VARCHAR(128) NULL COMMENT '上游事件标识', occurred_at DATETIME(3) NOT NULL COMMENT '业务事实发生时间', payload_hash VARCHAR(71) NOT NULL COMMENT '规范化负载摘要', payload_json JSON NOT NULL COMMENT '事件负载', status VARCHAR(32) NOT NULL DEFAULT 'RECEIVED' COMMENT '消费状态', lease_owner VARCHAR(128) NULL COMMENT '消费租约持有者', lease_until DATETIME(3) NULL COMMENT '消费租约截止时间', retry_count INT NOT NULL DEFAULT 0 COMMENT '消费重试次数', next_retry_at DATETIME(3) NULL COMMENT '下次消费时间', last_error VARCHAR(1000) NULL COMMENT '最后错误', received_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '接收时间', processed_at DATETIME(3) NULL COMMENT '消费完成时间', PRIMARY KEY (event_id), UNIQUE KEY uk_bridge_inbox_idempotency (idempotency_key), KEY idx_bridge_inbox_consume (status, next_retry_at, lease_until) ) ENGINE=InnoDB COMMENT='跨区域事件已接收箱'; CREATE TABLE IF NOT EXISTS bridge_delivery_attempt ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', event_id VARCHAR(128) NOT NULL COMMENT '事件全局标识', source_region VARCHAR(32) NOT NULL COMMENT '来源区域', target_region VARCHAR(32) NOT NULL COMMENT '目标区域', attempt_no INT NOT NULL COMMENT '投递序号', status VARCHAR(32) NOT NULL COMMENT '投递结果', response_code VARCHAR(64) NULL COMMENT '对端响应码', error_message VARCHAR(1000) NULL COMMENT '错误信息', started_at DATETIME(3) NOT NULL COMMENT '开始时间', finished_at DATETIME(3) NULL COMMENT '完成时间', PRIMARY KEY (id), UNIQUE KEY uk_bridge_attempt (event_id, attempt_no), KEY idx_bridge_attempt_event (event_id, started_at) ) ENGINE=InnoDB COMMENT='跨区域事件投递尝试记录';