29 lines
860 B
Go
29 lines
860 B
Go
package room
|
||
|
||
import "context"
|
||
|
||
// EventHandler 是 room outbox 事件进入 activity-service 后的处理边界。
|
||
// 消费来源可以是 MySQL outbox、Redis Stream 或 MQ,但处理侧必须保持幂等。
|
||
type EventHandler interface {
|
||
HandleRoomEvent(ctx context.Context, eventID string, eventType string, payload []byte) error
|
||
}
|
||
|
||
// Consumer 描述活动服务的房间事件消费骨架。
|
||
type Consumer struct {
|
||
handler EventHandler
|
||
}
|
||
|
||
// NewConsumer 创建房间事件消费者。
|
||
func NewConsumer(handler EventHandler) *Consumer {
|
||
return &Consumer{handler: handler}
|
||
}
|
||
|
||
// Handle 把外部事件交给幂等 handler。
|
||
func (c *Consumer) Handle(ctx context.Context, eventID string, eventType string, payload []byte) error {
|
||
if c == nil || c.handler == nil {
|
||
return nil
|
||
}
|
||
|
||
return c.handler.HandleRoomEvent(ctx, eventID, eventType, payload)
|
||
}
|