Publicador-Subscriptor simple con $system.Event
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.prj.xml
- Events_PubSub.prj.xml (actualizado! este ejemplo se ha publicado en https://github.com/intersystems-ib/cache-iat-pubsub)
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