Mustercode 'Message Routing' mithilfe einer Datei erweitern

Sie können den ESQL-Code des Mustercodes 'Message Routing' mit nur wenigen Änderungen auch in anderen Nachrichtenflüssen verwenden.

Bedingungen für die Cache-Aktualisierung ändern

Zurzeit wird der Cache aktualisiert, wenn eine Aktualisierungsnachricht an die Warteschlange 'ROUTING.REFRESH' gesendet wird.

Für den Zeitpunkt der Aktualisierung des Cache können andere Bedingungen festgelegt werden, z. B.:

Bearbeiten Sie folgende Position im ESQL-Code, um die Bedingung zu ändern:

IF CacheFile.valid IS NOT NULL THEN

So legen Sie als Aktualisierungsbedingung ein Zeitintervall von 60 Sekunden fest:

  1. Ändern Sie die im ESQL-Code rot umkreisten Kriterien wie folgt:
    IF CacheFile.LastUpDate is not null and (CURRENT_TIMESTAMP - 
        CacheFile.LastUpDate) second < INTERVAL '60' SECOND THEN
  2. Ändern Sie außerdem die zweite Instanz von
    IF CacheFile.Valid is not null THEN
    in den Wert des vorherigen Schritts.
  3. Ändern Sie
    SET CacheFile.valid = true;
    in
    SET CacheFile.LastUpDate = CURRENT_TIMESTAMP;

Relative Datensatzadresse verwenden statt Datensatzausdruck weiterzugeben

Zurzeit wählt der Mustercode den weiterzugebenden Datensatz aus, indem der Datensatzauswahlausdruck entsprechend festgelegt wird. Möglicherweise möchten Sie das jedes Mal, wenn eine Nachricht gesendet wird, der nächste Datensatz in der Datei abgerufen wird. Um dies zu erreichen, kann die relative Adresse (Offset) eingestellt werden.

Offset-Eigenschaft

Sie können die Offset-Eigenschaft wie folgt verwenden:

  1. Fügen Sie im Nachrichtenfluss Routing_using_records_file zwei Compute-Knoten hinzu, einen vor dem Knoten 'FileRead' und einen dahinter.
  2. Erstellen Sie im ESQL-Code eine gemeinsame Variable:
    declare cache SHARED ROW;
  3. Fügen Sie im ESQL-Code des ersten Compute-Knotens folgenden Code hinzu:
    SET OutputLocalEnvironment = InputLocalEnvironment;
    		IF (cache.file.offset > 0) THEN
              SET OutputLocalEnvironment.Destination.File.Offset = cache.file.offset;
              ELSE
              SET OutputLocalEnvironment.Destination.File.Offset = 0;
              END IF;	
    		
    Setzen Sie die Eigenschaft Rechenmodus auf LocalEnvironment.
  4. Fügen Sie im ESQL-Code des zweiten Compute-Knotens folgenden Code hinzu:
    SET OutputLocalEnvironment = InputLocalEnvironment;
    SET cache.file.offset = OutputLocalEnvironment.File.Read.NextRecordOffset;
    Setzen Sie die Eigenschaft Rechenmodus auf LocalEnvironment.
  5. Setzen Sie im Knoten 'FileRead' die Eigenschaft Record selection expression (Datensatzauswahlausdruck) auf true()
  6. Starten Sie den Nachrichtenfluss mit File_Records_file_message1.mbtest und klicken Sie mehrere Male auf 'In Warteschlange stellen'. Auf diese Weise werden die Datensätze nacheinander eingelesen.

Weiterleitung an Label-Knoten statt Warteschlange verwenden

Der Mustercode zeigt, wie eine Nachricht an eine bestimmte Warteschlange weitergeleitet wird. Eine andere Möglichkeit besteht darin, die Nachricht an einen Label-Knoten weiterzuleiten. Gehen Sie zur Implementierung dieser Lösung wie folgt vor:

  1. Ändern Sie im Nachrichtenfluss Routing_using_records_file im Knoten 'FileRead' die Eigenschaft Position für Ausgabedaten in $OutputLocalEnvironment/Destination/RouterList/DestinationData/labelName.
  2. Ändern Sie die Eigenschaft Position für Ergebnisdaten in $ResultRoot/MRM/data/labelName. Ändern Sie die Eigenschaft Nachrichtengruppe von queueName in labelName.
  3. Fügen Sie hinter dem Knoten 'FileRead' einen RouteToLabel-Knoten hinzu und entfernen Sie den MQOutput-Knoten.
  4. Fügen Sie mehrere Label-Knoten hinzu.
  5. Aktualisieren Sie fileRead.csv und ändern Sie die Warteschlangennamen in Label-Namen.
  6. Setzen Sie die Eigenschaft Label Name (Zielbezeichnung) in den einzelnen Label-Knoten auf die Label-Namen, die Sie in der Datei fileRead.csv festgelegt haben.
  7. Fügen Sie hinter jedem Label-Knoten einen MQOutput-Knoten hinzu und geben Sie den Warteschlangennamen an.

Sie können die MQOutput-Knoten durch andere Arten von Sendeknoten ersetzen. Sie können beispielsweise einen RouteToLabel-Knoten verwenden:

RouteToLabel-Knoten

Zurück zum Beginn des Mustercodes