4 - acceptă rapid sarcinile de intrare,
5 - returnează rezultatul sarcinii la cerere
6 - dacă nu există rezultat, returnează starea corespunzătoare
/*
Procesor - un serviciu care efectuează o operație lungă și consumatoare de resurse. Este deja implementat
Eroarea pe care o returnează este exclusiv legată de datele de intrare incorecte, sunt stabile și re-rezolvarea lor este inutilă
*/
type Processor interface {
Process([]byte) ([]byte, error)
}
/*
Presupunem că avem un generator de identificatori unici (de exemplu, UUID).
Generatorul garantează că nu vor exista coliziuni
*/
type ID string
// func NewID() ID
/*
Scheduler acceptă sarcini de la clienți, le pune în coadă și le pornește în procesare.
Asigură că nu sunt în execuție simultan mai mult de 'threads' metode de procesare
Oferă posibilitatea de a verifica starea sarcinii și de a obține rezultatul
nu blochează metodele sale publice pentru procesare
*/
type Scheduler struct {
processor Processor
}
func NewScheduler(
prc Processor,
threads int,
) *Scheduler {
// logică de inițializare
return &Scheduler{
processor: prc,
}
}
func (s *Scheduler) Queue(request []byte) ID {
// implementare
return ""
}