La forma en que he hecho esto en el pasado sigue un patrón de "ticket" o "recibo". El servicio REST acepta solicitudes de un recurso (un nombre de informe, un znode, etc.) y devuelve un ticket. Este ticket (usualmente un UUID o algo similar) se puede usar para representar una sesión. Las solicitudes posteriores utilizan este ticket para verificar el estado de sus solicitudes. Para garantizar el vencimiento correcto de las multas, se produce uno de los dos casos; puede agotar los tickets o, al recibir un resultado, el cliente debe devolver un ACK (acuse de recibo) al servicio.
ex.
Solicitud: GET/cuidador del zoológico/znode/efímera/foo Respuesta: 1234-1234-1234-1234
Solicitud: GET/cuidador del zoológico/estado/1234-1234-1234-1234 Respuesta: Trabajo (o disponible o bloqueado o NOTREADY o fallidos ...)
Solicitud: GET/cuidador del zoológico/estado/1234-1234-1234-1234 Respuesta: Adquirida (o disponibles o bien o el éxito o algún valor (s) ...)
Solicitud: GET/zookeeper/acknowledge/1234-1234-1234-1234 Respuesta: Aceptar (o boleto DESCONOCIDO, etc.)
mensajes interesantes manejabilidad:
Solicitud: GET/zookeeper/sesiones (o entradas)/ Respuesta: [1234, 5668, ...]
Solicitud : GET/zookeeper/kill/ Respuesta: OK (o UNKNOWN o FAILED ...)
Esto ha funcionado muy, muy bien. Esto significa, sin embargo, que el servicio REST es con estado, lo que hace que el equilibrio de carga sea más complicado. Utilicé un protocolo que asegura que se devuelva una identificación de servidor con cada respuesta y si el cliente recibe una identificación de servidor diferente y una de DESCONOCIMIENTO, usted asume que el servicio con el que estaba hablando ha muerto y comienza de nuevo. Esto implica un equilibrio de carga adhesiva (es decir, el round-robin no funcionaría aquí). El servicio REST debe ser de subprocesos múltiples para admitir la realización de estas solicitudes en paralelo y proporcionar acceso a una base de datos de tickets (generalmente en memoria, estructura de datos hashtable sincronizada), así como un hilo de tiempo de espera de sesión/ticket.
Espero que esto ayude.
Me gustaría establecer una recompensa por esta pregunta. ¿Cómo puedo hacer esto? –
Supongo que solo puede establecer una recompensa si no acepta una respuesta dentro de unos días. – ibz
¿Por qué se hizo esto una wiki comunitaria? –