Skip to main content

Diseño de procesamiento en segundo plano

4 Tareas

1 h 30 minutos

Visible to: All users
Avanzado Pega Platform 8.6 Español

Escenario

Front Stage piensa convertirse en una empresa internacional con oficinas en múltiples países. La empresa desea enviarle un correo electrónico por el día del equinoccio a cada cliente poco después de la medianoche, en la hora local del cliente. Cuando ocurre un equinoccio, la duración del día y la noche son iguales en todo el mundo. Los equinoccios ocurren dos veces al año conforme al siguiente cronograma.

Equinox

Front Stage quiere que los correos electrónicos se procesen de la manera más eficiente posible para minimizar el impacto en el procesamiento durante horas comerciales habituales.

La siguiente tabla incluye las credenciales que necesita para completar el ejercicio.

Función Nombre de usuario Contraseña
Admin admin@Booking reglas

Cuando comience, identifique los principales retos y documente su enfoque.

  • Calcule la hora para enviar el correo electrónico.
  • Envíe el correo electrónico conforme al cálculo de la hora.

Si bien no es parte de este ejercicio, puede desarrollar una solución completa abordando estos retos adicionales:

  • Asigne una dirección del cliente a la zona horaria correspondiente.
  • Desarrolle una manera de recuperar y almacenar las fechas de equinoccio.
  • Organice las relaciones entre las reglas configuradas.

Debe iniciar su propia instancia de Pega para completar este Título del desafío.

La inicialización puede demorar hasta 5 minutos. Le pedimos que tenga paciencia.

Tareas detalladas

1 Identificar opciones de diseño

Mientras desarrolla la implementación, apóyese en las reglas de Pega Platform™. Considere los siguientes enfoques para abordar los requerimientos:

  • Opción 1: cree un programador de trabajos de nodo único con procesadores de cola separados para cada zona horaria del cliente.
  • Opción 2: cree un programador de trabajos para cada zona horaria del cliente conocida. Configure cada programador de trabajos para que se ejecute en la hora adecuada para determinada zona horaria. El programador de trabajos consulta la base de datos para encontrar clientes dentro de la zona horaria indicada, enviándole a cada uno un correo electrónico.
  • Opción 3: cree agentes avanzados que equivalgan a la cantidad de zonas horarias conocidas del cliente multiplicadas por la cantidad de nodos o las superen. Permita que el agente maestro genere cronogramas de agente. Quite el cronograma de agente innecesario. Modifique los cronogramas de agente restantes configurando la hora de inicio en el momento en que salen los correos electrónicos para determinada zona horaria. Cada agente programa consultas de los clientes dentro de la zona horaria indicada, enviándole a cada uno un correo electrónico.

2 Evaluar opciones de diseño

Diseño Pros Contras
Crear un programador de trabajos de nodo simple
  • Bajo mantenimiento.
  • Consulta del cliente en el mismo día.
  • Procesamiento distribuido.
  • Evita correos electrónicos redundantes.
  • Inmune a la invalidez de nodos.
  • Complejidad adicional al tener que generar procesadores de cola según la zona horaria.
Crear un programador de trabajos por zona horaria
  • Procesamiento distribuido.
  • Evita correos electrónicos redundantes.
  • Alto mantenimiento.
  • Afectado por la invalidez de nodos.
  • Las zonas horarias del cliente deben conocerse con anticipación.
Crear agentes avanzados por zona horaria
  • Procesamiento distribuido.
  • Evita correos electrónicos redundantes. 
  • Menos rendimiento. 
  • Alto mantenimiento.
  • Afectado por la invalidez de nodos y los cronogramas de agentes.
  • Las zonas horarias del cliente deben conocerse con anticipación.

3 Recomendar la mejor opción de diseño

El programador de trabajos de nodo único con procesadores de cola separados, para cada zona horaria del cliente, es el enfoque recomendado debido a un mejor rendimiento.

4 Revisar los detalles de la solución

1. Calcular la hora para enviar el correo electrónico

Primero, determine la fecha en la que ocurre el equinoccio en cada zona horaria. Si bien el equinoccio ocurre simultáneamente en todo el mundo, la fecha real podría diferir según la ubicación geográfica de cada zona horaria. Por ejemplo, si el equinoccio ocurre el 22 de septiembre a las 20:02 GMT, el equinoccio ocurre el 22 de septiembre para aquellos que están ubicados en las zonas horarias dentro y al oeste de GMT +1. Para ubicaciones al este de GMT +1, el equinoccio ocurre el 23 de septiembre. Necesita esta información para enviar el correo electrónico en la mañana de la fecha correcta.

A continuación, calcule la hora en GMT de envío del correo electrónico a cada cliente, para enviar un correo electrónico a ese cliente brevemente después de la medianoche (en la hora local del cliente) en el día del equinoccio. Use el cálculo de la desviación de GMT para resolver el problema. La biblioteca DateTime para Pega Platform™ no contiene ninguna función que obtenga la desviación de GMT dentro de una zona horaria particular en un DateTime particular expresado en GMT. La función llamada ToZoneId simplifica el cálculo. La función se crea en una biblioteca ZonedDateTime que importa java.time.* y java.time.format.* . 

La función se muestra en la siguiente imagen.

Zoneddatetime

El tipo de caso BackgroundProcEx completa una lista de página de las instancias FSG-Examples-Data-TimeZoneInfo sincronizadas con diferentes horarios. Luego, se disparan cuatro rule-declare-expressions contra PageList. El contexto de página para rule-declare-expressions es .TimeZoneList().

.TimeZoneList() R-D-E Expresión
.LocalTime @ZonedDateTime.ToZoneId(Top.DateTimeString,.TimeZone)
.GMTTime @ZonedDateTime.ToZoneId(.LocalTime,"GMT")
.MidnightLocal @String.substring(.LocalTime,0,8)+"T000000.000 "+.TimeZone
.MidnightGMT @ZonedDateTime.ToZoneId(.MidnightLocal,"GMT")
Nota: La propiedad .GMTTime y la rule-declare-expression asociada no se requieren como parte de una solución. Se usan para verificación. El valor siempre debe coincidir con Top.DateTimeString

La siguiente imagen es una ilustración de los horarios calculados. IDL significa línea internacional de cambio de fecha.

IntDatetime

Para enviar un correo electrónico por el día del equinoccio a los clientes en Honolulu, Hawái, EE. UU., de manera que el correo electrónico llegue poco tiempo después de la medianoche (hora local) en la mañana del 22 de septiembre de 2021, Front Stage envía el correo electrónico el 22 de septiembre de 2021 a las 10:00 GMT. Cuatro horas después, la misma diferencia entre las dos zonas horarias, se envía el correo electrónico del Día del equinoccio a los clientes en Sídney, Australia.

Hay cuatro zonas horarias de distancia entre Sídney y Honolulu. Como resultado, la medianoche en Sídney ocurre cuatro horas después de la medianoche en Honolulu. La diferencia es que, después de que llegue la medianoche en Sídney, la fecha calendario pasa a ser un día superior a la fecha calendario en Honolulu.

2. Envíar el correo electrónico conforme al cálculo de la hora

En la solución, hay dos programadores de trabajos definidos: VernalEquinoxGreetings y AutumnalEquinoxGreetings. Estos dos programadores de trabajos se han configurado para ejecutarse anualmente el 19 de marzo de 2020 y el 21 de septiembre de 2020, respectivamente.

La actividad LaunchTimeZoneQueueProcessors que invoca cada programador de trabajos recibe el tipo de equinoccio, VERNAL u OTOÑAL, y por simplicidad, el DateTimeString cuando ocurre el equinoccio. Idealmente, hay una tabla de base de datos desde la que puede consultarse el DateTimeString, basándose en el año actual y el tipo de equinoccio.

La actividad crea un bucle a través de distintas zonas horarias identificadas por la página de datos de lista D_SamplePersonTimeZoneList. Para cada zona horaria, la actividad crea y completa una página FSG-Examples-Work-BackgroundProcEx llamada CaseInfo. Esa página luego se usa como página de paso cuando se invoca el método Queue-For-Processing. El método Queue-For-Processing ve que el procesador de cola configurado personalizado se definió como demorado; esto hace que el método Queue-For-Process muestre el campo Date time for processing (Fecha y hora del procesamiento). Si el procesador de cola no está configurado como demorado, no se muestra el campo Date time for processing (Fecha y hora del procesamiento).

D_SamplepersonActivity
Nota: Un enfoque alternativo que implica un riesgo innecesario es hacer que la actividad LaunchTimeZoneQueueProcessor genere un nuevo caso BackgroundProcEx para cada zona horaria. Cada caso BackgroundProcEx separado evita un bucle infinito desastroso y fuera de control detectando que existe una página llamada CaseInfo en el portapapeles. Al ver la página CaseInfo en el portapapeles, el caso separado cambia a la etapa alternativa Run in background (Ejecutar en segundo plano). Dentro de la etapa Run in background (Ejecutar en segundo plano), las propiedades DateTimeString y TimeZoneInfo se copian de la página CaseInfo de nivel superior en el caso BackgroundProcEx antes de la figura de flujo Run in background (Ejecutar en segundo plano). La figura Run in background (Ejecutar en segundo plano) le indica al procesador de cola SendTimeZoneGreetings demorado que se ejecute a las .TimeZoneInfo.MidnightGMT.

La actividad del procesador de cola SendTimeZoneGreetings del mismo nombre obtiene e itera cada SamplePerson en D_SamplePersonList[TimeZone:Param.TimeZone].pxResults.

En lugar de enviar un correo electrónico real con error, la actividad usa el método Log-Message en un paso para emitir la zona horaria y los valores WorkPartyUri de PegaRULES.log.

BackgroundExCase

Confirme su trabajo

Para completar la asignación, realice las siguientes tareas.

  1. En Dev Studio, verifique que se definan los datos SamplePerson.
    Sample person data
  2. Cierre sesión y vuelva a iniciarla como Admin@Booking (Administrador).
  3. Cambie al Grupo de acceso de ejercicios de procesos en segundo plano.
  4. Copie y pegue el valor para pxRequestor.pyLastSignon en un editor de texto; luego, agregue algunos minutos, por ejemplo, 10.
    202103113T021633.688 GMT << hora de inicio de sesión actual
    202103113T022633.688 GMT << 10 minutos agregados
  5. Localice el TestEquinoxGreetings Job Scheduler y compruébelo.

    Recuerde que el programador de trabajos está configurado para ejecutarse cada 10 minutos.

    Test Equinox Job Scheduler
  6. Haga clic en Parámetros.
    Job Scheduler parameter
  7. Copie la fecha del futuro cercano.
  8. En el campo Parameter value, pegue la fecha del futuro cercano.
    Nearfuturedate
  9. Inserte la regla del programador de trabajos.
  10. En Admin Studio, filtre Test para localizar TestEquinoxGreetings Job Scheduler.
  11. Opcional: haga clic en Override (Anular) para habilitar el programador de trabajos y haga clic en Override (Anular) para deshabilitar el programador de trabajos TestEquinoxGreetings.
    OverideJobSch
  12. Haga clic en Trace (Permitir acceso a la ubicación).
    trace job Scheduler
  13. Haga clic en una fila donde D_SamplePersonTimeZoneList sea la página de paso.
    Tenga en cuenta que se identifican dos zonas horarias:
    tracer page timezone

    Tenga en cuenta cómo se invoca Queue-For-Processing dos veces:

    tracer step queue for processing

    La siguiente imagen es un ejemplo de la página CaseInfo cuando se invoca Queue-for-Processing:

    caseinfo page tracer
  14. En Admin Studio, haga clic en Queue Processors (Procesadores de colas). Filtre en TimeZone.
    Admin Studio QueueP
  15. Si se crean más de dos instancias de procesador de cola, quite todas y vuelva a empezar habilitando el programador de cola y el seguimiento.
  16. Deshabilite el programador de trabajos en cuanto se visualice el rastreo.
    Admin Job Scheduler

         LaunchTimeZoneQueueProcessors convierte el Param.DateTimeString proporcionado en una zona horaria local, Param.TimeZone

         El cómputo de GMTTime muestra que la conversión de hora es reversible y no es parte de la solución.

         La lógica luego computa la medianoche en la zona horaria local configurando las horas, los minutos y segundos en 000000.000.

         La lógica convierte la medianoche local de nuevo a la zona GMT.

Timezone Activity

      Param.TimeZone = .TimeZoneInfo.TimeZone<br />
      BUCLE: SamplePersonList[TimeZone:Param.TimeZone].pxResults:
SendTimezoneActivity

   17. Compruebe los resultados en PegaRULES.log. El siguiente texto es un registro de ejemplo:

      2019-11-13 10:27:33,102 [,19,2,3,4,5,6,7,8,9]] [ STANDARD] [ ] [ ] (s_Work_BackgroundProcEx.Action) INFO - SendTimeZoneGreetings:                    TimeZone=Pacific/Honolulu, [email protected]<br />
<br />
      2019-11-13 10:27:33,102 [,19,2,3,4,5,6,7,8,9]] [ STANDARD] [ ] [ ] (s_Work_BackgroundProcEx.Action) INFO - SendTimeZoneGreetings:                    TimeZone=Pacific/Honolulu


Disponible en la siguiente misión:

If you are having problems with your training, please review the Pega Academy Support FAQs.

¿Le ha resultado útil este contenido?

¿Quiere ayudarnos a mejorar este contenido?

We'd prefer it if you saw us at our best.

Pega Academy has detected you are using a browser which may prevent you from experiencing the site as intended. To improve your experience, please update your browser.

Close Deprecation Notice