dosten / almundo-backend-test

A simple call center implementation.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Almundo Backend Test

Explicación

La clase Dispatcher hace uso principalmente de dos componentes propios de java.

Por un lado hace uso de ExecutorService con el cual creo un pool de threads con una cantidad máxima fija, la cual es configurable mediante el constructor de la clase, esto me permite definir cuantas llamas concurrentes puede soportar el dispatcher, si el dispatcher está completo, entonces las nuevas llamadas se van a encolar.

Por otro lado hace uso de PriorityBlockingQueue en la cual defino una queue de empleados, los cuales tienen un rol, el cual tiene a su vez una prioridad (como estamos hablando de un call center, los operadores tienen la mayor prioridad y los directores tiene la menor prioridad). Con cada llamada nueva, se toma un empleado con la mayor prioridad y se lo asigna a esa llamada, una vez terminada la llamada se vuelve a agregar al empleado a la queue para que pueda tomar nuevas llamadas.

Internamente el dispatcher no hace ningún manejo sobre la duración de la llamada, esa tarea queda para el que implemente el dispatcher, en el caso de los tests, se simula una duración random entre 5 y 10 segundos, luego se termina la llamada.

Puntos Extra

  • Cuando no hay ningún empleado disponible, simplemente se continua esperando indefinidamente a que uno este disponible, si cancelamos la llamada hacemos que el cliente pierda su "lugar" en la lista de espera, por lo que muevo esa responsabilidad al cliente.

  • Cuando se reciben más llamadas de las que soporta el dispatcher, lo que se hace es dejar en espera a las llamadas extra y una vez que otra llamada termine el empleado tomara la más antigua de las llamadas (el que primero llamo, primero es atendido).

Tests

Se encuentran disponibles varios tests unitarios para probar la funcionalidad del dispatcher (requisitos y puntos extra), para ejecutarlos, se debe correr:

$ mvn test

About

A simple call center implementation.


Languages

Language:Java 100.0%