33 lines
1.1 KiB
Go
33 lines
1.1 KiB
Go
package events
|
|
|
|
import "log/slog"
|
|
|
|
// EventBus — интерфейс шины событий приложения.
|
|
// Чистый pub/sub брокер без внешних зависимостей.
|
|
// Сервисы сами публикуют события и подписываются на них.
|
|
// Структура неэкспортируемая — создать объект можно только через NewEventBus.
|
|
type EventBus interface {
|
|
Publish(event string)
|
|
Subscribe(event string, handler func())
|
|
}
|
|
|
|
// eventBus — реализация шины событий.
|
|
type eventBus struct{}
|
|
|
|
// NewEventBus создаёт шину событий.
|
|
func NewEventBus() EventBus {
|
|
slog.Info("шина событий создана")
|
|
|
|
return &eventBus{}
|
|
}
|
|
|
|
// Publish публикует событие.
|
|
func (b *eventBus) Publish(event string) {
|
|
slog.Info("событие опубликовано", "event", event)
|
|
}
|
|
|
|
// Subscribe подписывается на событие.
|
|
func (b *eventBus) Subscribe(event string, handler func()) {
|
|
slog.Info("подписка на событие", "event", event)
|
|
}
|