93 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package interfaces | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"context" | ||
|  | 	"time" | ||
|  | ) | ||
|  | 
 | ||
|  | // Event 事件接口 | ||
|  | type Event interface { | ||
|  | 	// 事件基础信息 | ||
|  | 	GetID() string | ||
|  | 	GetType() string | ||
|  | 	GetVersion() string | ||
|  | 	GetTimestamp() time.Time | ||
|  | 
 | ||
|  | 	// 事件数据 | ||
|  | 	GetPayload() interface{} | ||
|  | 	GetMetadata() map[string]interface{} | ||
|  | 
 | ||
|  | 	// 事件来源 | ||
|  | 	GetSource() string | ||
|  | 	GetAggregateID() string | ||
|  | 	GetAggregateType() string | ||
|  | 
 | ||
|  | 	// 序列化 | ||
|  | 	Marshal() ([]byte, error) | ||
|  | 	Unmarshal(data []byte) error | ||
|  | } | ||
|  | 
 | ||
|  | // EventHandler 事件处理器接口 | ||
|  | type EventHandler interface { | ||
|  | 	// 处理器标识 | ||
|  | 	GetName() string | ||
|  | 	GetEventTypes() []string | ||
|  | 
 | ||
|  | 	// 事件处理 | ||
|  | 	Handle(ctx context.Context, event Event) error | ||
|  | 
 | ||
|  | 	// 处理器配置 | ||
|  | 	IsAsync() bool | ||
|  | 	GetRetryConfig() RetryConfig | ||
|  | } | ||
|  | 
 | ||
|  | // DomainEvent 领域事件基础接口 | ||
|  | type DomainEvent interface { | ||
|  | 	Event | ||
|  | 
 | ||
|  | 	// 领域特定信息 | ||
|  | 	GetDomainVersion() string | ||
|  | 	GetCausationID() string | ||
|  | 	GetCorrelationID() string | ||
|  | } | ||
|  | 
 | ||
|  | // RetryConfig 重试配置 | ||
|  | type RetryConfig struct { | ||
|  | 	MaxRetries    int           `json:"max_retries"` | ||
|  | 	RetryDelay    time.Duration `json:"retry_delay"` | ||
|  | 	BackoffFactor float64       `json:"backoff_factor"` | ||
|  | 	MaxDelay      time.Duration `json:"max_delay"` | ||
|  | } | ||
|  | 
 | ||
|  | // EventStore 事件存储接口 | ||
|  | type EventStore interface { | ||
|  | 	// 事件存储 | ||
|  | 	SaveEvent(ctx context.Context, event Event) error | ||
|  | 	SaveEvents(ctx context.Context, events []Event) error | ||
|  | 
 | ||
|  | 	// 事件查询 | ||
|  | 	GetEvents(ctx context.Context, aggregateID string, fromVersion int) ([]Event, error) | ||
|  | 	GetEventsByType(ctx context.Context, eventType string, limit int) ([]Event, error) | ||
|  | 	GetEventsSince(ctx context.Context, timestamp time.Time, limit int) ([]Event, error) | ||
|  | 
 | ||
|  | 	// 快照支持 | ||
|  | 	SaveSnapshot(ctx context.Context, aggregateID string, snapshot interface{}) error | ||
|  | 	GetSnapshot(ctx context.Context, aggregateID string) (interface{}, error) | ||
|  | } | ||
|  | 
 | ||
|  | // EventBus 事件总线接口 | ||
|  | type EventBus interface { | ||
|  | 	// 事件发布 | ||
|  | 	Publish(ctx context.Context, event Event) error | ||
|  | 	PublishBatch(ctx context.Context, events []Event) error | ||
|  | 
 | ||
|  | 	// 事件订阅 | ||
|  | 	Subscribe(eventType string, handler EventHandler) error | ||
|  | 	Unsubscribe(eventType string, handler EventHandler) error | ||
|  | 
 | ||
|  | 	// 订阅管理 | ||
|  | 	GetSubscribers(eventType string) []EventHandler | ||
|  | 	Start(ctx context.Context) error | ||
|  | 	Stop(ctx context.Context) error | ||
|  | } |