lifecycle

package
v0.2.2-alpha.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2023 License: GPL-3.0 Imports: 2 Imported by: 0

README

ServiceLifecycle

ServiceLifecycle is the interface to the service life cycle management subsystem. The ServiceLifecycle tracks the Service life cycle, listens to the signal of the process for graceful exit.

Concept

Service

Service is the interface for ServiceLifecycle to manage. The component that plans to use ServiceLifecycle needs to implement the interface.

// Service is the interface for ServiceLifecycle to manage.
type Service interface {
	// Name defines the unique identifier of the service, which cannot be repeated 
	// globally.
	Name() string
	// Start the service, for resource application, start background coroutine and 
	// other startup operations.
	//
	// The Start method should be used in non-block way, for example, a blocked 
	// listening socket should open a goroutine separately internally.
	Start(ctx context.Context) error
	// Stop the service, close the goroutines inside the service, recycle resources, 
	// and ensure the graceful launch of the service.
	Stop(ctx context.Context) error
}

Example

    ctx := context.Background()
    svcLifecycle.RegisterServices(service...)
	// blocks the svcLifecycle for waiting signals to shut down the process
    svcLifecycle.Signals(syscall.SIGINT, syscall.SIGTERM ...).Init(ctx).StartServices(ctx).Wait(ctx)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Lifecycle

type Lifecycle interface {
	// RegisterServices registers service to ServiceLifecycle for managing.
	RegisterServices(modular ...Service)
	// StartServices starts all registered services by calling Service.Start
	// method.
	StartServices(ctx context.Context) Lifecycle
	// StopServices stops all registered services by calling Service.Stop
	// method.
	StopServices(ctx context.Context)
	// Signals listens the system signals for gracefully stop the registered
	// services.
	Signals(sigs ...os.Signal) Lifecycle
	// Wait waits the signal for stopping the ServiceLifecycle, before stopping
	// the ServiceLifecycle will call StopServices stops all registered services.
	Wait(ctx context.Context)
}

Lifecycle is the interface to the service life cycle management subsystem. The ServiceLifecycle tracks the Service life cycle, listens to the signal of the process for graceful exit.

All managed services must first call RegisterServices to register with ServiceLifecycle.

type Service

type Service interface {
	// Name describe service name
	Name() string
	// Start a service, this method should be used in non-block form
	Start(ctx context.Context) error
	// Stop a service, this method should be used in non-block form
	Stop(ctx context.Context) error
}

Service provides abstract methods to control the lifecycle of a service

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL