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
|
||
|
|
}
|