4 - бързо приемане на входящи задачи,
5 - връщане на резултата от задачата по заявка
6 - ако няма резултат, връщане на съответния статус
/*
Процесор - услуга, която изпълнява дълга, ресурсно-интензивна операция. Вече е реализирана
Грешките, които връща, са изключително свързани с неправилни входни данни, стабилни са и повторното им искане е безсмислено
*/
type Processor interface {
Process([]byte) ([]byte, error)
}
/*
Предполагаме, че имаме генератор на уникални идентификатори (например UUID).
Генераторът гарантира, че няма да има сблъсъци
*/
type ID string
// func NewID() ID
/*
Планировчикът приема задачи от клиентите, ги поставя в опашка и започва обработката.
Осигурява, че не повече от 'threads' метода за обработка работят едновременно
Позволява да се провери статусът на задачата и да се получи резултатът
не блокира публичните си методи за обработка
*/
type Scheduler struct {
processor Processor
}
func NewScheduler(
prc Processor,
threads int,
) *Scheduler {
// логика за инициализация
return &Scheduler{
processor: prc,
}
}
func (s *Scheduler) Queue(request []byte) ID {
// реализиране
return ""
}