Documentation
¶
Overview ¶
Package flex provides a service lifecycle manager for Go applications.
It manages the concurrent startup, running, and graceful shutdown of service workers. Workers are started concurrently and run until one of the following occurs:
- A worker returns an error from Run()
- A signal (SIGINT, SIGKILL, SIGTERM) is received
- The provided context is canceled
When shutdown is triggered, all workers' Halt() methods are called concurrently with a fresh context that has DefaultHaltTimeout as its deadline, ensuring a graceful shutdown.
Start a service:
flex.MustStart(ctx, worker1, worker2)
Or with error handling:
if err := flex.Start(ctx, worker1, worker2); err != nil {
log.Fatal(err)
}
With options:
err := flex.StartOpts(ctx, []flex.Worker{w1, w2}, flex.WithoutSignals())
Index ¶
Constants ¶
const DefaultHaltTimeout = 30 * time.Second
DefaultHaltTimeout is the default timeout for graceful shutdown of workers. This provides workers with a grace period to close connections, flush data, and clean up resources during the halt phase.
Variables ¶
This section is empty.
Functions ¶
func Start ¶
Start is a blocking operation that will start processing the workers.
Workers are started concurrently and run until one of the following occurs: 1. A worker returns an error from Run() 2. A signal (SIGINT, SIGKILL, SIGTERM) is received 3. The provided context is canceled
When shutdown is triggered, all workers' Halt() methods are called concurrently with a fresh context that has DefaultHaltTimeout as its deadline. This ensures workers have a grace period to perform graceful shutdown operations such as closing connections or flushing data.
Types ¶
type Halter ¶
type Halter interface {
// Halt should tell the worker to stop doing work.
Halt(context.Context) error
}
Halter represents the behaviour for stopping a service worker.
type Option ¶ added in v1.1.0
type Option func(*options)
Option configures Start behavior.
func WithoutSignals ¶ added in v1.1.0
func WithoutSignals() Option
WithoutSignals disables signal-based shutdown via signal.NotifyContext. Useful when running inside a testing/synctest bubble or when signal handling is managed externally.