func (h *rabbitmqStruct) RpcFailover(err error) bool { log.Println("RPC REQUEST ERROR: ", err) done := make(chan bool) failed := make(chan time.Time) success := make(chan time.Time) if err != nil { time.AfterFunc(time.Duration(time.Second * time.Duration(amqpTimeout)), func() { failed <- time.Now() }) } if err == nil { time.AfterFunc(time.Duration(time.Millisecond * 15), func() { success <- time.Now() }) } go func () { for { select { case <- failed: done <- false break case <- success: done <- true break default: continue } } }() <- done return true } func (h *rabbitmqStruct) RpcTimeoutFailover(delivery []byte) error { var err error if len(delivery) <= 0 { err = errors.New("RPC request error") h.RpcFailover(err) return err } h.RpcFailover(nil) return nil }