Publicador-Subscriptor simple con $system.Event

Esta es la traducción del artículo original.

El archivo events_examples.zip contiene dos ejemplos que muestran cómo procesar una carga de trabajo de forma asíncrona utilizando colas persistentes.

Events Simple

Este es un ejemplo muy sencillo que crea algunos procesos trabajadores y les encola mensajes utilizando $system.Event.

; crear un recurso compartido y crear los procesos trabajadores
USER>do ##class(IAT.S04.Event.Test).Setup()
 
; encolar algunos mensajes hacia los trabajadores y ver qué sucede
USER>do ##class(IAT.S04.Event.Test).Run()
Show log? no/[yes]:
^Samples.Log=10
^Samples.Log(1)="[2016-02-19 09:43:14] Enqueuing 1"
^Samples.Log(2)="[2016-02-19 09:43:14] Worker 8168 grabs: 1"
^Samples.Log(3)="[2016-02-19 09:43:14] Enqueuing 2"
^Samples.Log(4)="[2016-02-19 09:43:14] Worker 18184 grabs: 2"
^Samples.Log(5)="[2016-02-19 09:43:14] Enqueuing 3"
^Samples.Log(6)="[2016-02-19 09:43:14] Worker 8168 grabs: 3"
^Samples.Log(7)="[2016-02-19 09:43:14] Enqueuing 4"
^Samples.Log(8)="[2016-02-19 09:43:14] Worker 18184 grabs: 4"
^Samples.Log(9)="[2016-02-19 09:43:14] Enqueuing 5"
^Samples.Log(10)="[2016-02-19 09:43:14] Worker 8168 grabs: 5"
 
; trabajo terminado, podemos enviar más mensajes o matar a los procesos trabajadores
write $system.Process.Terminate(8168)
1
write $system.Process.Terminate(18184)
1

Clases:

  • Manager - métodos para crear recursos compartidos así como los procesos trabajadores y encolar mensajes.
  • Queue - clase persistente simple utilizada para almacenar mensajes.
  • Worker - representa a un trabajador que espera que le llegue un evento para procesar el mensaje recibido.

Events PubSub

Este ejemplo está construido sobre la misma base que Events_Simple.

El objetivo en este caso es construir un modelo sencillo de Publicador-Subscriptor.

Hay dos subscriptores para dos tipos de mensajes distintos:

  • SubPatient - gestiona los mensajes relacionados con pacientes.
  • SubDummy - gestiona mensajes dummys.
; crear los eventos y los procesos subscriptores
do ##class(IAT.S05.PubSub.Example.Main).Setup()

; enviar algunos mensajes (de los dos tipos) al canal
do ##class(IAT.S05.PubSub.Example.Main).Run()

; mostrar el log con el resultado de lo que ha sucedido
zw ^PubSub.Log

 

Log

 

Clases

Comentarios