Event Structure

<< Click to Display Table of Contents >>

Navigation:  PUM - Modellierung und Codeerzeugung > Strukturen und Muster >

Event Structure

Beschreibung

Diese Struktur ermöglicht das Senden eines Events auf den Eventbus (und damit über RabbitMQ). Die Struktur stellt einen API-Call SendApplicationEvent zur Verfügung. Dabei liefert Gemstone/S den Event bei RabbitMQ ab. Der Programmierer füllt die Instanz der Klasse TSTAPIGeneralCarrierEventClass aus und führt den obigen API Call aus.

Die Auslieferung der Events oder Nachrichten geschieht über den Exchange "aqm.topic". Die Struktur der gesamten Events der Anwendung ist komplett außerhalb von PUM. Der Entwickler muß sich eine entsprechende Struktur ausdenken.

Beispielstruktur

In einer Anwendung haben wir eine Queue geschaffen, die "allEvents" hieß. Diese wurde mit "aqm.topic" verbunden und bekam den RoutingKey "#". Diese Queue bekam alle Events zugestellt. Dann wurden noch Events pro Session versandt (RoutingKey = sessionGop) und dann noch für spezielle Benutzergruppen ("interviewer", "supervisoren").

Die Anwendungen haben dann mehrere "subscribe" - einmal auf "sessionGop", "interviewer" und einmal auf "sessionGop","supervisoren".

Die Events aus "allEvents" wurde durch ein C# Programm abgeholt und in eine Datenbank geschrieben (allerdings wurden hier viele Informationen ausgeblendet).

Beispielimplementierung

Beispielimplementation des API-Calls auf dem Server:

 

apiEventSendApplicationEvent: aTSTAPIGeneralCarrierEventClass options: aMSKRestCallOptions

 

  |  |

 

 

  "

   Wir checken ggfs. ob der Benutzer den Call überhaupt machen darf ... der

   eigentliche Check muss entsprechend kodiert werden: isAllowedToSendEvent

  "

  aMSKRestCallOptions getUser isAllowedToSendEvent

    ifFalse:[

      "Wir nutzen die vordefinierte Access Denied Exception"

      TSTEnumErrorDefinition errCodeAccessDeniedThrowSignal: aMSKRestCallOptions 

    ].

 

 

 

  "Wir bauen die Rückgabestruktur zusammen"

  ^(self restAnswerClass 

      okRequestFor: aMSKRestCallOptions restCallInstance 

      result:  (TSTAPIGeneralResult with: true)) 

     "Wir ändern keine Daten - daher kann man auf ein Commit verzichten, und einfach ein Abort erzwingen"         

     successWithoutCommitCall;

     yourself

 

 

Weitere Codebeispiele

Anlegen einer Queue für eine bestimmte Sitzung (Snippet):