Http 200 en 500 milisegundos

134 views
Skip to first unread message

Juan Martin Larocca

unread,
Mar 29, 2021, 9:44:57 AM3/29/21
to Developers PHP MercadoLibre
Como lo ven esto nuevo?

Porque yo respondo siempre el 200 pero creo que depende de la potencia del server, no se si siempre responde igual, sobretodo cuando meli te envia 7000 notificaciones juntas (me paso)

Andres Misiak

unread,
Mar 29, 2021, 10:00:32 AM3/29/21
to Developers PHP MercadoLibre
Hola Juan, tuve el mismo problema hace unos años, no había nada que pueda resolver y devolver en 200ms, porque hay que tener en cuenta que dentro de ese tiempo también tienen que estar ambas comunicaciones.

Lo resolví haciendo que el endpoint solamente escriba las notificaciones en un archivo y luego tengo un queue que buscar y resuelve las notificaciones con tiempo.

Otra cosa que me ayudó y metí en el mismo queue es que a veces me llegan varias veces la misma notificación (en realidad son cambios de estado, pero varios en un mismo segundo), así que aprovecho para procesarlo sólo una vez en el queue. Fui analizando el delay y hoy tengo 2 minutos de espera para ver todos los repetidos que llegan y recién ahí ejecuto el queue.

Espero te sirva.
Saludos.

Marcel Lettier

unread,
Mar 29, 2021, 12:02:09 PM3/29/21
to Developers PHP MercadoLibre
Qué tal. Yo personalmente venía zafando de las notificaciones, primcipalmente por temas como este de los tiempos de respuesta. Tenemos todo el desarrollo con consultas a los Web Services de ML en que supeditamos todo al trabajo local replicándolo sobre la página de ML.

Ahora justo tenemos un cliente nuevo que necesita que se "reflejen" en el sistema los cambios de precios realizados directamente en la página de ML, y vengo a descubrir que las llamadas a /items/search no tienen filtro en base a última modificación, por lo que la única forma de saber qué items cambiaron en ML va a ser suscribirse a cambios de item, así que vamos a tener que implementar estos hooks.  Estoy usando la vieja MELI-PHP-SDK-2.0.0 a la que le agregamos el token en los headers y por ahora sin problemas.

Es llamativo que ML no cuente maps con los foros y también hayan descontinuado sus SDK, pero bueno... está buena la idea del grupo acá.

Saludos desde Uruguay.

Marcel

Andres Misiak

unread,
Mar 29, 2021, 12:10:22 PM3/29/21
to Marcel Lettier, Developers PHP MercadoLibre
Hola Marcel, yo también tengo un SDK viejo un poco toqueteado. Justamente la idea es armar un SDK actualizado por nosotros, por eso iniciamos el grupo.

Andres Misiak


--
You received this message because you are subscribed to the Google Groups "Developers PHP MercadoLibre" group.
To unsubscribe from this group and stop receiving emails from it, send an email to developers-php-merc...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/developers-php-mercadolibre/b74776a2-0b04-428f-84e7-d5f38858cb18n%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Fernando Aguirre

unread,
Mar 29, 2021, 6:46:38 PM3/29/21
to Developers PHP MercadoLibre
Hola amigos, buen inicio de semana para todos con esta noticia.

Lo que yo hago es tener un archivo que recibe todas las notificaciones y las mando directamente a una Queue que tengo con RabbitMQ, y alla ya se hace el "proceso lento", y pues si llegan 700 notificaciones por segundo (que me ha pasado bastante) el servidor no se satura ni la base de datos, porque al enviar la notificacion al Queue, el Queue se encarga de distribuir correctamente los procesos y no se satura, entonces no va a procesar las 700 notificaciones en ese segundo, si no que un poco despues, que vaya, no es nada "de riesgo" que las procese 1 minuto despues.

Basicamente recibo, reenvio y proceso.

Anteriormente si tenia todo el proceso directamente al recibir las notificaciones, pero si es un mundo de tiempo el que se lleva, y un dia decidi renovar ese sistema de procesar notificaciones, que me ha caido como anillo al dedo ahorita.

Igualmente estaba leyendo en stackoverflow que podias enviar el status 200 antes de terminar el script, asi le notifican a ML que todo bien, pero siguen procesando la notificacion, una manera "sucia" pero efectiva jajaja. 

session_write_close(); //close the session 
fastcgi_finish_request(); //this returns 200 to the user, and processing continues

En caso de que usen nginx.


Saludos

Reply all
Reply to author
Forward
0 new messages