supervision

package
v0.6.0 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2024 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AccidentRecord

type AccidentRecord struct {
	PrimeCulprit *prc.ProcessId // 事故元凶(通常是消息发送人,可能不存在或逃逸)
	Victim       *prc.ProcessId // 事故受害者
	Supervisor   Supervisor     // 事故监管者,将由其进行决策
	Message      prc.Message    // 造成事故发生的消息
	Reason       prc.Message    // 事故原因
	Strategy     Strategy       // 受害人携带的监督策略,应由责任人执行
	State        *AccidentState // 事故状态
	Stack        []byte         // 事件堆栈
}

AccidentRecord 事故记录

func NewAccidentRecord

func NewAccidentRecord(primeCulprit, victim *prc.ProcessId, supervisor Supervisor, message, reason prc.Message, strategy Strategy, state *AccidentState, stack []byte) *AccidentRecord

type AccidentState

type AccidentState struct {
	// contains filtered or unexported fields
}

AccidentState 事故状态

func NewAccidentState

func NewAccidentState() *AccidentState

func (*AccidentState) AccidentCount

func (as *AccidentState) AccidentCount() int

AccidentCount 获取事故数量

func (*AccidentState) LastTime

func (as *AccidentState) LastTime() time.Time

LastTime 获取最后一次产生事故的时间

func (*AccidentState) Record

func (as *AccidentState) Record()

Record 记录一次事故发生

func (*AccidentState) Solved

func (as *AccidentState) Solved()

Solved 事故已解决

type Decide

type Decide interface {
	Decide(record *AccidentRecord) Directive
}

Decide 监管决策是一个用于监督者策略的函数接口

type Directive

type Directive uint8

Directive 监管指令

const (
	DirectiveStop     Directive = iota + 1 // 停止子 Actor。OnTerminated 生命周期钩子方法会被调用,子 Actor 的状态会被清理
	DirectiveRestart                       // 停止并重新启动子 Actor。子 Actor 的状态会被重置
	DirectiveResume                        // 忽略异常,让子 Actor 继续处理后续的消息。子 Actor 的状态保持不变
	DirectiveEscalate                      // 升级 Actor(向上级 Actor 报告异常)
)

type FunctionalDecide

type FunctionalDecide func(record *AccidentRecord) Directive

FunctionalDecide 是一个用于监督者策略的函数类型

func (FunctionalDecide) Decide

func (f FunctionalDecide) Decide(record *AccidentRecord) Directive

Decide 实现了 Decide 接口

type FunctionalLogger

type FunctionalLogger func(record *AccidentRecord)

FunctionalLogger 是一个函数类型的监管记录器

func (FunctionalLogger) Log

func (f FunctionalLogger) Log(record *AccidentRecord)

Log 当发生事故时

type FunctionalStrategy

type FunctionalStrategy func(record *AccidentRecord)

FunctionalStrategy 是一个函数类型的监督策略

func (FunctionalStrategy) OnPolicyDecision

func (f FunctionalStrategy) OnPolicyDecision(record *AccidentRecord)

OnPolicyDecision 当发生事故时

type FunctionalStrategyProvider

type FunctionalStrategyProvider func() Strategy

FunctionalStrategyProvider 是一个函数类型的监督策略提供者

func (FunctionalStrategyProvider) Provide

Provide 提供一个监督策略

type Logger

type Logger interface {
	// Log 当发生事故时
	Log(record *AccidentRecord)
}

Logger 监管记录器是一个处理函数,它将在发生意外时被调用,以记录用户定义的日志信息

type Strategy

type Strategy interface {
	// OnPolicyDecision 当发生事故时
	OnPolicyDecision(record *AccidentRecord)
}

Strategy 是用于对事故记录进行决策处理的监督策略

func OneForOne

func OneForOne(restartCount int, baseDelay, maxDelay time.Duration, decide Decide) Strategy

OneForOne 创建一个 OneForOne 策略的监督者

  • 当一个 Actor 发生故障时,只有该 Actor 会被处理
  • 当 restartCount 为负数时,将会无限重启

func RestartStrategy

func RestartStrategy() Strategy

RestartStrategy 是一个监管策略,它将在发生事故时立即重启

func ResumeStrategy

func ResumeStrategy() Strategy

ResumeStrategy 是一个监管策略,它将在发生事故时恢复进程

func StopStrategy

func StopStrategy() Strategy

StopStrategy 是一个监管策略,它将在发生事故时停止进程

type StrategyProvider

type StrategyProvider interface {
	// Provide 提供一个监督策略
	Provide() Strategy
}

StrategyProvider 是监督策略提供者

type Supervisor

type Supervisor interface {
	// Ref 获取监管者的进程引用
	Ref() *prc.ProcessId

	// Children 获取该监管者下的所有子进程引用
	Children() []*prc.ProcessId

	// Restart 重启指定进程,会导致该进程的所有子进程被停止
	Restart(refs ...*prc.ProcessId)

	// Stop 停止指定进程及其所有子进程
	Stop(refs ...*prc.ProcessId)

	// Resume 恢复指定进程
	Resume(refs ...*prc.ProcessId)

	// Escalate 升级事故
	Escalate(record *AccidentRecord)
}

Jump to

Keyboard shortcuts

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