Y run workflow, simplemente ejecutaremos el flujo de trabajo nuevamente desde el principio. Pero cada vez que el flujo de trabajo llega a un paso, verá que el paso ya ha sido registrado. Y en lugar de volver a ejecutar el paso, devolverá la salida registrada del paso. Y al hacer esto una y otra vez, el flujo de trabajo eventualmente se recuperará, eventualmente llegará al primer paso que no tiene un punto de control y reanudará la ejecución normal desde ese punto. Así que, en otras palabras, nuestro flujo de trabajo se recuperará desde el último paso completado siguiendo este procedimiento. Genial.
Así que ahora podemos ver aproximadamente cómo se ve nuestra biblioteca. Una última cosa que quiero mostrarte es un proceso diagramático de lo que esta biblioteca podría hacer cuando se aplica a una aplicación real. Así que vamos a ver un ejemplo de un flujo de trabajo. Así que un servicio de checkout, un servicio de checkout simplificado del tipo que podrías ejecutar cuando haces clic en el botón de compra en un sitio web. Así que este flujo de trabajo se implementaría como una función de JavaScript. Y cada uno de estos pasos como crear pedido, reservar inventario, procesar pago, también serían funciones de JavaScript. Así que cuando ejecutamos este flujo de trabajo, llamamos a run workflow.
Lo primero que hacemos es registrar las entradas. Así que escribiremos un registro en la base de datos que contenga las entradas del flujo de trabajo, el ID único, y marcaremos el flujo de trabajo con un estado pendiente. Luego, una vez que hemos escrito ese punto de control, podemos comenzar a ejecutar realmente el flujo de trabajo. Así que creamos un pedido, reservamos inventario, procesamos el pago, y después de cada paso, registramos el resultado de los pasos. Entonces, digamos que algo se rompe. Acabamos de procesar el pago, y de repente nuestro servidor falla. Y nuestro proceso ya no está en ejecución. Normalmente, eso sería bastante malo porque nuestros clientes pagaron por algo, y esperan que su pedido sea cumplido, pero no lo sabemos porque nuestro proceso simplemente se estrelló.
Recuperar eso podría ser complicado, pero tenemos flujos de trabajo duraderos, así que es mucho más fácil. Así que cuando nuestro servidor se reanuda, mirará la base de datos y verá que hay este flujo de trabajo que está en un estado pendiente, por lo que necesita ser recuperado. Luego recuperará el flujo de trabajo, buscando cada uno de sus pasos, y devolviendo el resultado registrado. Así que verá que los pasos de crear pedido, reservar inventario, y procesar pago fueron todos exitosos. Así que los adelantará, recargará desde sus puntos de control, y ahora los volverá a ejecutar. Luego finalmente, llegaremos al primer, paso aún no completado, cumplir pedido. Lo ejecutaremos, cumpliremos el pedido, haremos feliz al cliente, y luego marcaremos los flujos de trabajo como exitosos, y haremos todo eso sin volver a ejecutar nada, sin doble reservar inventario, o doble cobrar al cliente.
Comments