Construyendo un demonio de línea de comandos en PHP para emular AWS SQSD


A veces, cuando construyes un proyecto, hay partes de la arquitectura que existe en la producción y que no existe en tu máquina de desarrollo. Las piezas faltantes (como el software del propietario que es específico de su proveedor de alojamiento) a veces pueden significar sorpresas no deseadas cuando se implementan en producción. Recientemente, como parte de mi trabajo sobre la marcha, decidí abordar esto. Desde mi auto local le faltaba el entorno de trabajadores de Demon SQS AWS Elastic Beanstalk (conocido como SQSD). AWS no es de código abierto, por lo que desafortunadamente no hay una forma oficial de replicarlo. Así que decidí construir una pequeña aplicación de línea de comandos PHP (CLI) para tratar de reproducir su funcionalidad.
En este artículo, cubriré algunos de los aspectos de crear una aplicación de línea de comandos en el PHP y explicaré cómo los he implementado para mi réplica SQSD CLI. Laravel vs SQSD primero, una pequeña explicación. El trabajador de cola de Laravel opera consultando un sistema de cola (SQS en nuestro caso) para trabajos y luego los ejecuta en la secuencia (porque el trabajador de cola es parte de la aplicación). Sin embargo, AWS SQSD está diseñado para ser completamente independiente del marco para que cualquier aplicación pueda ser utilizada. Funciona a través de la encuesta de una cola SQS para trabajos y luego la publicación en un punto final especificado en el entorno de trabajo elástico de Beanstalk (el valor predeterminado es http: // localhost). Si un trabajo falla por algún motivo, entonces el trabajo se envía a lo que se llama letras muertas para el procesamiento manual.
El AWS SQSD también contiene otras funcionalidades específicas para el trabajo elástico de Beanstalk. Por ejemplo, puede leer un archivo Chron.yaml en la raíz de su aplicación que especifica tareas periódicas que se pueden realizar de acuerdo con un programa. SQSD enviará un trabajo a la cola cada vez que se active el programa. Estos trabajos serán procesados ​​por SQSD como de costumbre, pero se publicarán en la ruta especificada en Chron.yaml con algunos encabezados adicionales. Esto es útil en un entorno de escala automático en el que un solo “cron” puede enviar trabajos a la cola y cualquier servidor en el clúster puede tomar el trabajo y ejecutarlo. Crear una CLI en PHP Creación de un script PHP es realmente más simple de lo que lo haría. suponer. Por ejemplo, si crea un .php sin .php (por ejemplo, mycliapp): #!/Usr/bin/env isleader = $ this-> isleaderProcess (); if (! $ this-> daemoshouldrun ()) {$ this-> pauseworker (); continuo; } $ function (); $ This-> sleep (); $ this-> stopifneceSary (); } La idea aquí es que el cierre de $ function () se llamará en cada bucle y luego el proceso dormirá durante un cierto período de tiempo (para evitar aplastar el procesador) antes de ejecutar el bucle nuevamente. Entonces podemos usar esta clase de trabajadores en el comercio de trabajo para crear un demonio:
$ Trabajador = nuevo trabajador ($ opciones); // … return $ wierer-> daamon (function () use ($ sqsd, $ worker, $ output) {if ($ wierr-> isleader) {$ sqsd-> runperiodicsks ();} $ sqsd-> checkformesages ();}); Empacar la aplicación CLI La última pieza del rompecabezas para crear una aplicación PHP CLI es cómo empacarla para que sea fácil de usar. En primer lugar, debemos compilar la aplicación en un binario, para que pueda usarse como un paquete independiente sin tener que instalar adicciones manualmente. PHP llama a estos archivos binarios PHAR. Probablemente se le utilizará un PHAR en el pasado, incluso si no se ha dado cuenta de que esto es (por ejemplo, el compositor se distribuye como un PHAR). La construcción manual de los archivos PHAR puede ser un dolor de cabeza, por lo que prefiero usar la aplicación Box2 para hacer el proceso de construirlos muy fácilmente. Con Box2, simplemente defina un archivo Box.json en la raíz de su proyecto (aquí el que creé para SQSD), especifique algunas opciones y luego ejecute Box Build para crear el PHAR. Simple. Ahora que tenemos nuestro archivo binario, podríamos detenernos y decirle a la gente que descargue Pharhar manualmente y lo use tal como está. ¿Pero si a la gente le gustaría instalar el paquete SQSD en su proyecto usando compositor? Afortunadamente, el compositor tiene una tecla “bin” que nos permite especificar si nuestro paquete contiene archivos binarios. Si es así, el símbolo binario está conectado a la carpeta de proveedores/bin, para que pueda rodarse de la siguiente manera:

Php ./vendor/bin/sqsd.phar Work Ahora podemos decirle a las personas nuestro paquete como cualquier otro paquete compositor (por ejemplo, el compositor requiere gilbritron/sqsd) y el binar estará disponible para ejecutarse como el orden anterior. Como nota secundaria, si está buscando un paquete que haga que Laravel funcione con SQSD, puedo recomendar el paquete Duner/Laravel-Aws-Worker. Conclusión Los aspectos de construir una aplicación CLI en PHP que he tratado brevemente en este artículo son la base de la mayoría de las aplicaciones de CLI. Obviamente, sus propias aplicaciones tendrán diferentes requisitos y funcionarán de diferentes maneras, ¡así que no dude en tomar lo que he hecho aquí y construir sobre ello para vincular en los comentarios!). Si está interesado en cavar un poco más profundo, yo Le recomiendo que eche un vistazo al código fuente SQSD y mire cómo he implementado el SQSD CLI más complicado. ¿Alguna vez has creado una aplicación CLI en PHP? ¿Alguna vez has usado la consola Symony en Box2? ¿Qué más le gustaría poder responder en su automóvil local? ¿Tiene consejos o trucos para crear aplicaciones CLI en PHP? Dinos en los comentarios.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *