Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // TaskAlreadyExistsError возникает при попытке запустить уже существующий процесс. TaskAlreadyExistsError = errors.New("task already exists") // TaskUndefinedError возникает при попытке остановить несуществующий процесс. TaskUndefinedError = errors.New("task is undefined") )
Ошибки, возвращаемые при работе с Runner.
var Component = compogo.Component{ Name: "runner", Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provides( newRunner, func(r *runner) Runner { return r }, ) }), Stop: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(func(d *runner) error { return d.Close() }) }), }
Component — компонент Runner для Compogo. Регистрирует Runner в DI-контейнере и останавливает его при завершении приложения.
Functions ¶
This section is empty.
Types ¶
type Middleware ¶
type Middleware interface {
// Middleware оборачивает ProcessFunc.
// Получает текущий Process и следующую функцию в цепочке.
// Возвращает новую функцию, которая будет вызвана вместо следующей.
Middleware(Process, ProcessFunc) ProcessFunc
}
Middleware — интерфейс для цепочки обработчиков процессов. Позволяет оборачивать ProcessFunc для добавления логирования, метрик, восстановления после паник и т.д.
Пример:
type LoggerMiddleware struct {
logger Logger
}
func (m *LoggerMiddleware) Middleware(p Process, next ProcessFunc) ProcessFunc {
return func(ctx context.Context) error {
m.logger.Info("starting", "process", p.Name())
err := next(ctx)
m.logger.Info("finished", "process", p.Name())
return err
}
}
type MiddlewareFunc ¶
type MiddlewareFunc func(Process, ProcessFunc) ProcessFunc
MiddlewareFunc — функциональный адаптер для Middleware. Позволяет использовать функции как middleware.
Пример:
middleware := MiddlewareFunc(func(p Process, next ProcessFunc) ProcessFunc {
return func(ctx context.Context) error {
// before
err := next(ctx)
// after
return err
}
})
func (MiddlewareFunc) Middleware ¶
func (m MiddlewareFunc) Middleware(p Process, next ProcessFunc) ProcessFunc
Middleware реализует интерфейс Middleware для MiddlewareFunc.
type Process ¶
Process — интерфейс выполняемого процесса. Сочетает в себе:
- io.Closer — для остановки процесса
- Process(ctx) — для выполнения работы
- Name() — для идентификации
Процессы запускаются через Runner и выполняются в отдельных горутинах.
type ProcessFunc ¶
ProcessFunc — функция, выполняемая процессом. Принимает контекст и возвращает ошибку.
type Runner ¶
type Runner interface {
io.Closer
// RunProcess запускает один процесс.
RunProcess(Process) error
// RunProcesses запускает несколько процессов.
RunProcesses(...Process) error
// StopProcess останавливает процесс по объекту.
StopProcess(Process) error
// StopProcessByName останавливает процесс по имени.
StopProcessByName(string) error
// HasProcess проверяет наличие процесса по объекту.
HasProcess(Process) bool
// HasProcessByName проверяет наличие процесса по имени.
HasProcessByName(string) bool
// Use добавляет middleware для всех процессов.
Use(middlewares ...Middleware)
}
Runner управляет жизненным циклом процессов (Task). Предоставляет возможности:
- Запуска процессов с поддержкой middleware
- Остановки процессов по имени или объекту
- Graceful shutdown через io.Closer
- Проверки наличия процессов
Runner потокобезопасен и может использоваться из нескольких горутин.
type Task ¶
type Task struct {
// contains filtered or unexported fields
}
Task — базовая реализация интерфейса Process.
Пример:
task := NewTask("worker", func(ctx context.Context) error {
// работа
return nil
})
runner.RunProcess(task)
func NewTask ¶
func NewTask(name string, processFunc ProcessFunc, middlewares ...Middleware) *Task
NewTask создаёт новый Task. Принимает имя, функцию выполнения и опциональные middleware.
func (*Task) Close ¶ added in v0.0.10
Close останавливает задачу, отменяя её контекст. Реализует интерфейс io.Closer.