Habilite JavaScript para visualizar esta página.

Altova FlowForce Server 2021 Advanced Edition

Un trabajo de FlowForce normal devuelve un resultado después de que hayan finalizado todos los pasos de procesamiento, siempre y cuando no se encuentre ningún error. Mientras se estén ejecutando pasos, el trabajo debe esperar a que terminen antes de ejecutar el resultado. Para los trabajos expuestos como servicios web, esto significa que la transacción HTTP debe mantenerse abierta durante todo el tiempo en que se esté ejecutando el trabajo, lo que puede llevar varios minutos o, en algunos casos, incluso horas, en función del volumen de datos que se procese.

 

Para gestionar este tipo de casos puede usar un tipo especial de paso de FlowForce llamado paso aplazado. Los pasos aplazados permiten que FlowForce devuelva resultados de inmediato, ya que solo se procesan una vez el trabajo ha devuelto un resultado. Si un trabajo contiene pasos aplazados, FlowForce procesará primero todos los pasos no aplazados, después devolverá el resultado del trabajo y entonces empezará a ejecutar los pasos aplazados.

 

Aunque un trabajo con pasos aplazados devuelva un resultado temprano, se considera que el trabajo está en curso hasta que se complete la ejecución de todos los pasos aplazados. Se considera que el trabajo ha terminado correctamente si también se han procesado correctamente todos sus pasos aplazados.

 

Puede crear pasos aplazados en cualquier parte del trabajo que admita un paso. Para ello, cree un trabajo nuevo o abra uno que ya exista y después haga clic en el botón Paso aplazado nuevo, en la sección Pasos de ejecución:

fs_step_types

Así se añade una secuencia "Aplazar" a la página de configuración del trabajo:

fs_postponed_sequence

Haga clic en add, dentro de la secuencia "Aplazar", para crear el paso que quiere aplazar. También puede crear varios pasos aplazados, lo que es útil si los pasos aplazados dependen unos de otros, como en el ejemplo de más abajo. Las secuencias aplazadas se pueden anidar; sin embargo, la orden de ejecución puede complicarse en ese caso (consulte más abajo "Escenarios avanzados").

 

Observaciones:

 

Una secuencia aplazada es como cualquier otro trabajo dentro del trabajo actual y puede tener la misma estructura que un trabajo. Por ejemplo, puede incluir (o ser parte de) bucles o bloques (protegidos) de control de errores.

Un trabajo puede contener varias secuencias aplazadas sin relación unas con otras. Esto puede ser importante para el control de errores: si ocurre un error dentro de una secuencia aplazada, las demás no se verán afectadas. Para más detalles consulte la sección "Control de errores", más abajo.

Todas las secuencias aplazadas se ejecutan después de todos los pasos no aplazados, de arriba a abajo. Para casos especiales consulte "Escenarios avanzados", más abajo.

Se pueden aplazar pasos dentro de los llamados subtrabajos, que se ejecutan después de que el trabajo principal devuelva un resultado.

 

Ejemplo: pasos aplazados

Este ejemplo muestra un posible uso de los pasos aplazados. Este trabajo es un buen candidato para ello porque se expone como trabajo web y puede ser invocado en cualquier momento por un cliente, inclusive desde el explorador. Para más detalles sobre este tipo de trabajos, consulte Exponer trabajos como servicios web.

fs_postponed_step

El paso A ejecuta un comando de shell que requiere tiempo y que enumera de forma recursiva todos los directorios y archivos de dentro de un directorio grande del sistema. Por esta razón, el paso A se ha colocado dentro de la secuencia "Aplazar". El paso B toma el resultado estándar (stdout) generado por A y lo escribe en un archivo. El paso B depende de la salida que genere A y, por tanto, también debe formar parte de la secuencia aplazada.

 

El paso C informa a los emisores de llamadas al servicio de que la tarea se ha suministrado con éxito. Este paso se ha añadido deliberadamente en último lugar, aunque se ejecutará el primero al ejecutar el trabajo.

 

Siempre que se llama al servicio web, los pasos anteriores se ejecutan en este orden: C*, A, B. El motivo es que A y B son pasos pospuestos, por lo que C se ejecuta primero. El asterisco marca el punto en el que el trabajo devuelve un resultado.

 

La ventaja de esta configuración es que el trabajo devuelve un resultado inmediatamente después de ejecutar el paso C y la transacción HTTP puede terminar, lo que libera recursos del servidor para otras solicitudes. Después de devolver el resultado del trabajo, FlowForce procede a ejecutar los pasos aplazados A y B en la secuencia habitual.

 

Como confirmación, si invoca el trabajo del ejemplo anterior en su explorador, observará que en el explorador aparece el mensaje "La tarea se ha suministrado correctamente" en unos instantes, mientras el trabajo se sigue ejecutando hasta que crea el archivo output.txt (esto puede llevar unos segundos a unos minutos en función del tamaño del directorio). Si ni A ni B fallan se crea el archivo de salida en la ruta de acceso C:\FlowForce\Postponed\output.txt.

 

Nota:en este ejemplo el paso C tiene que ser el último del trabajo porque produce el resultado que se envía al explorador al probar el servicio web con la cadena de texto "La tarea se ha suministrado correctamente". Si coloca el paso C en el primer puesto, se sigue ejecutando primero y el paso aplazado B sigue siendo el último paso del trabajo en ejecutarse. Sin embargo, esto cambiaría el resultado del trabajo y el explorador mostraría una salida vacía parecida a []. La razón es que el resultado de un trabajo de FlowForce es siempre el resultado del último paso que se ejecuta. Los pasos aplazados no tienen un valor de retorno pero producen una secuencia vacía.

 

Escenarios avanzados

Un trabajo puede contener varios pasos aplazados, no necesariamente uno después de otro, o varias secuencias de pasos aplazados. Por ejemplo, imagine que un trabajo consiste en estos pasos, en este orden:

 

A

postpone B

C

postpone D

 

Los pasos anteriores se ejecutan en este orden: A, C*, B, D. Como puede ver, primero se ejecutan los pasos no aplazados, seguidos por los pasos aplazados. El asterisco marca el punto en el que el trabajo devuelve un resultado.

 

También puede añadir pasos aplazados dentro de condiciones (pasos Opción). En este caso el paso aplazado solo se ejecuta si también se ejecuta la correspondiente rama "cuando" o "de lo contrario".

 

when expression=true

{

 postpone A

 B

 C

}

otherwise

{

 postpone D

 E

 F

}

 

En el trabajo abstracto anterior, si la expresión evalúa en true, los pasos se ejecutan en este orden: B, C*, A. De lo contrario, el orden de ejecución será: E, F*, D. El asterisco indica dónde devuelve el trabajo un resultado.

 

En pasos por cada, los pasos aplazados se procesan después de todos los pasos no aplazados, en el mismo orden que el bucle del que forman parte.

 

for each item in list

{

 A

 postpone B

}

 

Por ejemplo, imagine que el bucle se recorre tres veces, entonces los pasos anteriores se ejecutan en orden A1, A2, A3*, B1, B2, B3, donde:

 

El dígito indica el número del bucle

El asterisco indica dónde devuelve el trabajo un resultado.

 

También puede anidar pasos aplazados en otros pasos aplazados. En este caso, las reglas son:

 

Primero se ejecutan los pasos exteriores de la misma profundidad

Los pasos aplazados anidados se ejecutan solo después de que haya finalizado la secuencia matriz.

 

Por ejemplo, imagine que un trabajo consiste en estos pasos aplazados anidados:

 

A

postpone

[

 B

 postpone C

 D

 postpone E

 F

]

G

postpone

[

 H

 postpone J

 K

 postpone L

 M

]

N

 

Conforme a las reglas anteriores, los pasos se ejecutan en este orden: A, G, N*, B, D, F, C, E, H, K, M, J, L. El asterisco marca el punto en el que el trabajo devuelve un resultado.

 

Si necesita crear y probar configuraciones avanzadas como la anterior, recuerde que siempre puede hacer un seguimiento del orden de ejecución de los pasos desde el registro de FlowForce.

 

Control de errores

Como hemos mencionado anteriormente, los pasos aplazados pertenecen a una secuencia aplazada. Un trabajo puede contener varias secuencias aplazadas en distintos lugares del trabajo. Cuando ocurre un error, las reglas generales son:

 

Si un paso aplazado encuentra un error, se cancela junto con el resto de pasos posteriores en la misma secuencia aplazada y el error se registra. Tenga en cuenta que esto afecta solamente a la secuencia actual. Si hay otras secuencias aplazadas en el mismo trabajo, estas seguirán ejecutándose.

Si un paso aplazado dentro de un bloque protegido encuentra un error, por lo general esto cancelará todos los pasos aplazados que formen parte de ese bloque. Esto funciona como una acción deshacer y es necesario si consideramos que un bloque protegido puede haberse configurado para que se reintente varias veces en caso de error (consulte Reintentar cuando haya errores).

 

Para ilustrar cómo funciona la primera regla de las que acabamos de mencionar, vamos a considerar este ejemplo:

fs_postponed_error

En el panel anterior, el paso D se ejecuta primero porque es el único paso no aplazado.

 

Además del paso D hay dos secuencias "Aplazar": la primera contiene los pasos A y B y la segunda contiene el paso C. Ahora imaginemos que falla el paso A. En este caso, FlowForce Server cancela toda la secuencia "Aplazar", por lo que también cancela el paso B. La secuencia que contiene el paso C no se ve afectada por el error y se sigue ejecutando.

© 2015-2021 Altova GmbH