estaba necesitando aprender sobre queues en laravel y me vi como 10 tutoriales (incluído en inglés) antes que el tuyo, y aprendí más en los primeros 10 minutos de tu video, que en todos los tutoriales anteriores. y además muy ameno y detallado, muy bueno 👍
Que tal muy bueno el video, una consulta hay alguna manera por medio de laravel saber si un trabajo se agrego exitosamente en la queue, para poder realizar una acción en la aplicación por ejemplo mostrar un alert indicandole un mensaje como su solicitud fue agregada exitosamente, espere ser atendido.
Una vez que ya hiciste el dispatch ya es que fue a la queue, en caso de no tener la queue andando una exception deberia lanzarse. Yo simplemente si obtenes un 200 desde el cliente podes mostrar el alert, o como lo manejes, agregando algo a la session y mirandolo desde blade.
Hola, dices que me puedo cambiar a Redis en cualquier momento. Si hago eso solo los jobs a procesar se moverían/almacenarian allá(Redis)? Aun sería necesario seguir teniendo mi tabla failed-jobs en db?
Para realizar el cambio asegurate de que primero la queue este vacia, laravel no va a leer de una queue y moverla a otra, es algo q podes intentar hacer vos pero no se hace automaticamente. una vez que cambies la configuracion laravel va a empezar a escribir y leer jobs desde la nueva configuracion olvidandose de la vieja. Con respesto a los failed jobs es una configuracion aparte, la podes actualizar para que tambien se guarde en redis. Eso esta en config/queues al final del archivo como "failed" ahi podes cambiar la base de datos, tabla
Hola Jose, cuando corres el worker le podes especificar la cantidad de reintentos que debe realizar, una vez alcanzados esos reintentos y si existe la tabla (la podes crear con el comando de artisan php artisan queue:failed-table y correr la migracion que genero) va a insertar el job en esta tabla para que despues decidas que hacer con esos, podes reintentarlos nuevamente con el comando php artisan queue:retry o borrarlos con php artisan queue:flush
una consulta, si yo tengo que realizar un consumidor de colas sqs el cual deberia estar escuchando constantemente si llegan mensajes a esa cola ( lo mensajes que tiene esa cola son generados externamente por otra api).....cual es la manera mas eficiente porque generar un worker que este escuchand esa cola? o un schedule que se ejecute cada x minutos para verificar si hay msj. Desde ya muchas gracias
con un cron no es muy recomendado, lo que recomiendan desde el lado de laravel es utilizar supervisord que se va a encargar de que siempre este la cantidad configurada de workers corriendo. El cron lo que hace en disparar un proceso pero el workers no es que corre y termina, sino que queda corriendo esperando idealmente nunca deberia detenerse, pero si pasa el cron no lo va a levantar de nuevo, el cron va a estar creando uno tras otro con el tiempo configurado. Por eso supervisord le indicas cuando procesos y el comando y el se va a ocupar que siempre esten corriendo los indicados
Hola Jose, pueden haber varios workers por queue, es una de las ventajas, lo que tenes que hacer es correr varias veces el mismo comando artisan work. Si estas usando supervisord como sugiere la documentacion hay un parametro para especificar la cantidad de procesos que en este caso representan a cada worker
@@Alpha_Dev oh ya, eso lo hace más interesante, crees que sea buena idea utilizarlas para lidiar con los límites de request por sec de algunas apis :v? Para 40 req * sec, una queue con 40 workers y a cada job le doy un delay extra por si tarda menos de un 1sec en resolverse.
@@jseh_ 40 workers son bastantes, es va a ser una carga al servidor, asi que te diria q lo pienses bien el caso de uso. Si tu problema reside que una api que consumis limita a 40 request yo consideraria mas implementar un throttle, o un lock, en si lo q podes hacer cuando detectas que llegaste al limite, usualmente el servidor te va a responder con un 429, pones un wait o un lock por un minuto o 30 segundos. Porque imagino que si estas llegando al limite cada proceso de request a la api no llega a tardar un segundo. Para resumir es posible la solucion que propones, pero con la informacion que me decis no se si es la mas optima, te comendaria que lo intentes y veas la performance y que analises como es que estas llegando al limite de la api.
Hola Ariel como va? Sabes que hace poco termine el curso de laravel pero quedaron pendientes cosas que ya en anteriores comentarios te conte jajaja Para cuando el live coding de un proyecto desde 0 ? Tenes algun consejo para ser un crack con el ecosistema de php? Saludos!
podes darme un poco mas de contexto quizas en el minuto que digo eso?. Con respecto a produccion para las queue hoy ya es mas estable utilizar una base de datos pero sigue sin ser lo mas recomendado para aplicacion grande.
@@marroquin92 ahi ya depende de la configuracion de los workers. A un worker le podes decir que tenga prioridad en una queue sobre otra, o que sea exclusivo de una queue. depende la cantidad de trabajo que tengas muchas veces te conviene tener multiples workers viendo siempre que la cantidad que tengas no te sobrepase lo que puede soportar tu servidor. Mucho de eso se va viendo sobre la marcha dependiendo los tamanios de las queues y demas que manejes hasta que encuentres con un equilibro de workers y espera que se este conforme.
Cuando se que es necesario agregar una queue a algun endpoint de mi aplicacion, estoy haciendo una app propia y quiero tener todo cubierto y hasta hace poco empece a estudiar sobre las queues XD
Hola Rodrigo. Depende mucho de la aplicacion y sus fines. Una manera de darte cuenta para empezar si son procesos que llevan mucho tiempo, o si hacen esperar al usuario pero no los afecta directamente. Un ejemplo es digamos cuando el usuario se registra mandarle un mail de bienvenida, es algo que no lo afecta directamente despues de registrarse pero dependiendo el servidor lo podemos hacer esperar sin un motivo, porque podria seguir utilizando el sitio y que el mail le llegue despues. Otro caso seria una carga y proceso de un archivo. Digamos que tu app permite cargar un csv y leerlo. Una vez cargado tener el proceso atado al request del usuario no esta bueno, mejor moverlo a una queue, este te permite si muchos usuarios cargan un archivo al mismo tiempo no sobrecargar el server, simplemente todas las peticiones para cargar archivos se van a la queue y se van a ir procesando en un volumen manejable. Espero que estos ejemplos te ayuden a identificar posibles lugares en tu app. Otra cosa mas, si estas esperando una respuesta inmediata de un proceso para seguir operando es un indicador que no necesitas utilizar las queue en esa parte. Dado que al mandarlo a la queue no sabes cuando va a terminar ni va a devolver una respuesta. Saludos y muchos exitos.
Brother, Te la comiste con los comentarios de las Colas, el que sea venezolano entenderá, tranquilo, es que no se podría trabajar de los *Chinazos* (como se dice acá en Venezuela) por lo de las colas.! ja, ja, ja, ja.!
damm!!. Mi hermano muchas felicidades!!. Como la mayoría, uno de mis sueños es programar abroad. Y tengo un monton de dudas, usas php en tu trabajo, cómo encontraste la vacante etc. tengo la idea de que para salir a programar abroad, necesitas c# o java, talvés js. Me gustaría escuchar lo que tiene que decir una persona con la experiencia que tú tienes. Igual talvés son cosas que quieres mantener privadas y así. De todos modos te envío las mejores vibras y grandes exitos.
Si obviamente los detalles finos los mantego privados. Pero algunas cosas si puedo contestar. Si usamos php. La oferta de trabajo la encontre en stack overflow (tiene una seccion de jobs). Y con respecto a la tecnologia es parte de lo que dicen muchos sin sentido que php esta muerto que no sirve entonces te dicen como como esa mientras que hay mucho mercado. Una cosa si decides buscar es que busques empresas que ofrescan el sponsor de la visa ( a menos que ya tengas ciudadania o algo que ya te permita trabajar al pais que vayas) y tambien si ayudan con la relocacion economicamente porque bueno es costoso acomodarse en un lugar nuevo. Saludos y exitos.
@@gerardorebolledo3385 el mejor consejo no dejar de buscar. Antes de quedar en este me rechazaron de muchos lados. Algunas veces habiendo pasado por entrevistas y otro ni me contestaban los mails. Muchas veces me dieron ganas de bajar los brazos pero seguí intentando mandando currículum y bueno hasta que un día paso.
Me gusta mucho tu forma de explicar, para mi es muy clara y siempre me ayudas mucho con los temas de laravel. ¡¡Gracias!!
Que bueno que mi estilo de explicar te sea util. Gracias por el feedback, saludos y exitos.
estaba necesitando aprender sobre queues en laravel y me vi como 10 tutoriales (incluído en inglés) antes que el tuyo, y aprendí más en los primeros 10 minutos de tu video, que en todos los tutoriales anteriores. y además muy ameno y detallado, muy bueno 👍
Me alegro que te haya servido, gracias por el mensaje. Exitos en tus projectos.
Muchas gracias por tu tiempo, aprendí mucho en este video.
Me alegra que hayas aprendido con el video.
no hay muchos videos sobre este tema, gracias crack por compartir tu conocimiento y experiencia.
Gracias por el comentario Juan, me ayuda saber que lo que hago ayuda a la gente.
Muy buenos los videos! Estaría bueno que hagas algún video sobre buenas practicas a la hora de un desarrollo de un proyecto o api en laravel.
Me sirvió mucho para entender los fundamentos. Felicitaciones.
Gracias por hacerme lo saber. Éxitos
un video genial, muchas gracias
Con gusto, me alegra poder ayudar. Saludos y exitos.
Muy claro!! Muchas gracias!
clarisimo capo!
Gracias por estos videos!
De nada, me alegro que sirvan a los demás
Fantástico video! ¿Podrías decirme que utilizas para poder moverte por laravel desde la terminal? Gracias!
Hola Emilio gracias por el mensaje. Utilizo varias herramientas no se a que parte te referis especificamente, con la temrinal uso mucho tmux y neovim
A neovim. Gracias por el nombre, ahora investigaré sobre el. 👍
se puede llamar un evento(broadcasting) en un job para Vue Js?
Que tal muy bueno el video, una consulta hay alguna manera por medio de laravel saber si un trabajo se agrego exitosamente en la queue, para poder realizar una acción en la aplicación por ejemplo mostrar un alert indicandole un mensaje como su solicitud fue agregada exitosamente, espere ser atendido.
Una vez que ya hiciste el dispatch ya es que fue a la queue, en caso de no tener la queue andando una exception deberia lanzarse. Yo simplemente si obtenes un 200 desde el cliente podes mostrar el alert, o como lo manejes, agregando algo a la session y mirandolo desde blade.
@@Alpha_Dev gracias por la ayuda estimado
Amigo trabajo con neovim usando astrovim, pero el autocomplete de laravel que tienes se ve buenisimo, como hiciste para configurarlo.
Muchas configuraciones, y despues ese video lo cambio mucho, en github esta toda mi config si queres tomar ideas.
Hola, dices que me puedo cambiar a Redis en cualquier momento. Si hago eso solo los jobs a procesar se moverían/almacenarian allá(Redis)? Aun sería necesario seguir teniendo mi tabla failed-jobs en db?
Para realizar el cambio asegurate de que primero la queue este vacia, laravel no va a leer de una queue y moverla a otra, es algo q podes intentar hacer vos pero no se hace automaticamente. una vez que cambies la configuracion laravel va a empezar a escribir y leer jobs desde la nueva configuracion olvidandose de la vieja.
Con respesto a los failed jobs es una configuracion aparte, la podes actualizar para que tambien se guarde en redis. Eso esta en config/queues al final del archivo como "failed" ahi podes cambiar la base de datos, tabla
Si el job falla no se elimina de la base de datos?
Hola Jose, cuando corres el worker le podes especificar la cantidad de reintentos que debe realizar, una vez alcanzados esos reintentos y si existe la tabla (la podes crear con el comando de artisan php artisan queue:failed-table y correr la migracion que genero) va a insertar el job en esta tabla para que despues decidas que hacer con esos, podes reintentarlos nuevamente con el comando php artisan queue:retry o borrarlos con php artisan queue:flush
una consulta, si yo tengo que realizar un consumidor de colas sqs el cual deberia estar escuchando constantemente si llegan mensajes a esa cola ( lo mensajes que tiene esa cola son generados externamente por otra api).....cual es la manera mas eficiente porque generar un worker que este escuchand esa cola? o un schedule que se ejecute cada x minutos para verificar si hay msj. Desde ya muchas gracias
con un cron no es muy recomendado, lo que recomiendan desde el lado de laravel es utilizar supervisord que se va a encargar de que siempre este la cantidad configurada de workers corriendo.
El cron lo que hace en disparar un proceso pero el workers no es que corre y termina, sino que queda corriendo esperando idealmente nunca deberia detenerse, pero si pasa el cron no lo va a levantar de nuevo, el cron va a estar creando uno tras otro con el tiempo configurado. Por eso supervisord le indicas cuando procesos y el comando y el se va a ocupar que siempre esten corriendo los indicados
@@Alpha_Dev Gracias es la duda que necesitaba evacuarme !!
Pero es un solo worker(en un hilo) por queue o pueden haber varios workers por queue?
Hola Jose, pueden haber varios workers por queue, es una de las ventajas, lo que tenes que hacer es correr varias veces el mismo comando artisan work. Si estas usando supervisord como sugiere la documentacion hay un parametro para especificar la cantidad de procesos que en este caso representan a cada worker
@@Alpha_Dev oh ya, eso lo hace más interesante, crees que sea buena idea utilizarlas para lidiar con los límites de request por sec de algunas apis :v? Para 40 req * sec, una queue con 40 workers y a cada job le doy un delay extra por si tarda menos de un 1sec en resolverse.
@@jseh_ 40 workers son bastantes, es va a ser una carga al servidor, asi que te diria q lo pienses bien el caso de uso. Si tu problema reside que una api que consumis limita a 40 request yo consideraria mas implementar un throttle, o un lock, en si lo q podes hacer cuando detectas que llegaste al limite, usualmente el servidor te va a responder con un 429, pones un wait o un lock por un minuto o 30 segundos. Porque imagino que si estas llegando al limite cada proceso de request a la api no llega a tardar un segundo. Para resumir es posible la solucion que propones, pero con la informacion que me decis no se si es la mas optima, te comendaria que lo intentes y veas la performance y que analises como es que estas llegando al limite de la api.
Mandarlo a la queue, suena como algo que le dirías a alguien manejando mal en la calle
Jajaja puede ser, nunca lo habia visto asi.
@@Alpha_Dev muchas gracias por este tutorial, muy pero muy util.
Hola Ariel como va?
Sabes que hace poco termine el curso de laravel pero quedaron pendientes cosas que ya en anteriores comentarios te conte jajaja
Para cuando el live coding de un proyecto desde 0 ?
Tenes algun consejo para ser un crack con el ecosistema de php?
Saludos!
@@Alpha_Dev si es verdad, tengo que practicar más jajajaj
Que buenas están las colas loco
eso de alta y default, es local, pero en produccion como se realiza?
podes darme un poco mas de contexto quizas en el minuto que digo eso?. Con respecto a produccion para las queue hoy ya es mas estable utilizar una base de datos pero sigue sin ser lo mas recomendado para aplicacion grande.
@@Alpha_Dev para darle prioridad a una queue o no se detengan las demás si una se atrasa como podría hacerle?
@@marroquin92 ahi ya depende de la configuracion de los workers. A un worker le podes decir que tenga prioridad en una queue sobre otra, o que sea exclusivo de una queue. depende la cantidad de trabajo que tengas muchas veces te conviene tener multiples workers viendo siempre que la cantidad que tengas no te sobrepase lo que puede soportar tu servidor. Mucho de eso se va viendo sobre la marcha dependiendo los tamanios de las queues y demas que manejes hasta que encuentres con un equilibro de workers y espera que se este conforme.
Cuando se que es necesario agregar una queue a algun endpoint de mi aplicacion, estoy haciendo una app propia y quiero tener todo cubierto y hasta hace poco empece a estudiar sobre las queues XD
Hola Rodrigo. Depende mucho de la aplicacion y sus fines. Una manera de darte cuenta para empezar si son procesos que llevan mucho tiempo, o si hacen esperar al usuario pero no los afecta directamente. Un ejemplo es digamos cuando el usuario se registra mandarle un mail de bienvenida, es algo que no lo afecta directamente despues de registrarse pero dependiendo el servidor lo podemos hacer esperar sin un motivo, porque podria seguir utilizando el sitio y que el mail le llegue despues.
Otro caso seria una carga y proceso de un archivo. Digamos que tu app permite cargar un csv y leerlo. Una vez cargado tener el proceso atado al request del usuario no esta bueno, mejor moverlo a una queue, este te permite si muchos usuarios cargan un archivo al mismo tiempo no sobrecargar el server, simplemente todas las peticiones para cargar archivos se van a la queue y se van a ir procesando en un volumen manejable.
Espero que estos ejemplos te ayuden a identificar posibles lugares en tu app.
Otra cosa mas, si estas esperando una respuesta inmediata de un proceso para seguir operando es un indicador que no necesitas utilizar las queue en esa parte. Dado que al mandarlo a la queue no sabes cuando va a terminar ni va a devolver una respuesta.
Saludos y muchos exitos.
@@Alpha_Dev ya me quedo claro muchas gracias por la explicación super digerible y por tus videos, saludos y muchos exitos para ti tambien.
ufff mira esa colaaa!
jajaj. Da para muchos comentarios como este. Gracias
Brother, Te la comiste con los comentarios de las Colas, el que sea venezolano entenderá, tranquilo, es que no se podría trabajar de los *Chinazos* (como se dice acá en Venezuela) por lo de las colas.! ja, ja, ja, ja.!
jajja, si cada pais va a tener sus modismos y en muchos van a dar gracia. Saludos.
wtf!! berlin? whats that?
jajaj, pues si vivo en Berlin. Me delato la terminal
damm!!. Mi hermano muchas felicidades!!. Como la mayoría, uno de mis sueños es programar abroad. Y tengo un monton de dudas, usas php en tu trabajo, cómo encontraste la vacante etc. tengo la idea de que para salir a programar abroad, necesitas c# o java, talvés js. Me gustaría escuchar lo que tiene que decir una persona con la experiencia que tú tienes. Igual talvés son cosas que quieres mantener privadas y así. De todos modos te envío las mejores vibras y grandes exitos.
Si obviamente los detalles finos los mantego privados. Pero algunas cosas si puedo contestar.
Si usamos php. La oferta de trabajo la encontre en stack overflow (tiene una seccion de jobs). Y con respecto a la tecnologia es parte de lo que dicen muchos sin sentido que php esta muerto que no sirve entonces te dicen como como esa mientras que hay mucho mercado.
Una cosa si decides buscar es que busques empresas que ofrescan el sponsor de la visa ( a menos que ya tengas ciudadania o algo que ya te permita trabajar al pais que vayas) y tambien si ayudan con la relocacion economicamente porque bueno es costoso acomodarse en un lugar nuevo.
Saludos y exitos.
Gracias Ariel por compartir un poco de tu experiencia. A ver que dia se me da a mí, tener una experiencia así. Saludos excelente día.
@@gerardorebolledo3385 el mejor consejo no dejar de buscar. Antes de quedar en este me rechazaron de muchos lados. Algunas veces habiendo pasado por entrevistas y otro ni me contestaban los mails. Muchas veces me dieron ganas de bajar los brazos pero seguí intentando mandando currículum y bueno hasta que un día paso.