示例#1
0
func NewBreaker(threshold int64, breaker string, breaks map[string]func()) *circuit.Breaker {
	var cb *circuit.Breaker

	switch breaker {
	case "threshold":
		cb = circuit.NewThresholdBreaker(threshold)
	case "consecutive":
		cb = circuit.NewConsecutiveBreaker(threshold)
	default:
		log.Fatal("invalid breaker type")
	}

	events := cb.Subscribe()

	go func() {
		for {
			e := <-events
			switch e {
			case circuit.BreakerTripped:
				breakMe("trip", breaks)
			case circuit.BreakerReset:
				breakMe("reset", breaks)
			case circuit.BreakerFail:
				breakMe("fail", breaks)
			case circuit.BreakerReady:
				breakMe("ready", breaks)
			default:
				breakMe("event", breaks)
			}
		}
	}()
	return cb
}