¿Cuál es una buena manera de conectar el modelo de petición/respuesta http síncrona con un modelo asíncrono basado en cola?Conexión del modelo de solicitud/respuesta HTTP con la cola asíncrona
Cuando llega la solicitud HTTP del usuario genera una solicitud de trabajo que va a una cola (beanstalkd en este caso). Uno de los trabajadores recoge la solicitud, hace el trabajo y prepara una respuesta.
El modelo de cola no es de solicitud/respuesta: solo hay solicitudes, no respuestas. Entonces, la pregunta es, ¿qué mejor podemos hacer para que la respuesta vuelva al mundo de HTTP y la devuelva al usuario?
Ideas:
beanstalkd es compatible con temas de peso ligero o colas (que ellos llaman tubos). Podríamos crear un tubo para cada solicitud, hacer que el trabajador cree un mensaje en ese tubo, y tener el proceso http sentado y esperar en el tubo la respuesta. No me gusta particularmente, ya que tiene procesos apache sentados alrededor de tomar memoria.
Solicite la respuesta del cliente http. La solicitud HTTP inicial del usuario inicia el trabajo en la cola y vuelve inmediatamente. El cliente (el navegador del usuario) sondea periódicamente para obtener una respuesta. En el back-end, el trabajador pone su respuesta en memcached, y conectamos nginx a memcached para que el sondeo sea liviano.
Utilice Comet. Similar a la segunda opción, pero con una comunicación http más elegante para evitar el sondeo.
Me inclino por 2 ya que es fácil y conocido (no he utilizado el cometa). Supongo que probablemente también haya un modelo obvio mucho mejor que no haya pensado. ¿Qué piensas?
Estoy teniendo el mismo problema y estoy evaluando las mismas opciones. ¿Puede compartir lo que eligió, cómo lo realizó y cuáles son los pros y los contras de su solución implementada? Gracias – tropikalista