Der WSO2 Enterprise Integrator verfügt über eine Task-Implementierung, mit der Sie wiederkehrende oder periodische CRON-Jobs planen können. Doch wie funktioniert das? Vor allem mit CRON, denn für viele sind diese Kombinationen aus Fragezeichen und Bindestrichen ein wenig verwirrend und schwer zu verstehen.
Im Rahmen dieser Übung habe ich eine sehr einfache Befehlsfolge erstellt, die wir mit einer Reihe von Beispielen für die Einrichtung von Tasks verwenden können. Dies wird dazu beitragen, Ihnen die Vielseitigkeit der Tasks in Enterprise Integrator 6.6.0 vor Augen zu führen.
Benutzerdefinierte Implementierung von Tasks
Integrator bietet einen Mechanismus, mit dem Sie Ihre eigenen benutzerdefinierten Taskimplementierungen einrichten können. Das heißt, Sie ergänzen die Task-Implementierung von WSO2 Enterprise Integrator um ein maßgeschneidertes Java-Programm. Dies eröffnet Ihnen eine noch größere Gestaltungsfreiheit, die über den Bereich der sequenzbasierten und proxybasierten Tasks hinausgeht.
Ein Beispiel: In den Niederlanden werden jeden ersten Montag im Monat um die Mittagszeit die Alarmsirenen für den Ernstfall getestet.
Eine benutzerdefinierte Java-Erweiterung kann dabei festlegen, was im Alarmfall zu tun ist und dazu Signale an andere Systeme senden. Wir werden hier jedoch nicht darauf eingehen, da dies ein sehr spezieller Anwendungsfall ist.
Wiederkehrende Prozesse
Beginnen wir jedoch mit den beiden Optionen, die wir in Bezug auf die Planung von Tasks haben. Die erste ist die einfachste: eine in bestimmten Zeitabständen häufig wiederkehrende Task. Eine solche Task führt einfach eine Aktion so oft aus, wie Sie es angeben, wobei das Intervall, das Sie ebenfalls festlegen können, in Sekunden angegeben wird.
Die Konfiguration der Task in Integration Studio wird wie folgt durchgeführt;
Nach ihrer Einrichtung wird die Task folgendermassen aussehen;
Wenn Sie also eine Nachricht an ein System senden oder eine Routineabfrage durchführen möchten, können Sie dies tun, indem Sie einfach die Anzahl der Iterationen und das entsprechende Intervall angeben. Es gibt jedoch eine Ausnahme. Wenn Sie etwas planen, das nur einmal ausgeführt werden soll, bedeutet dies, dass der Vorgang bereits beim Start ausgeführt wird. Ein geplanter Task mit dem Wert eins wird also nur beim Systemstart/Neustart ausgeführt.
DadJokeAPI
Werfen wir also einen Blick darauf, wie das bei der Musterlösung funktioniert. Ich verwende hier eine sehr nützliche API. Sie erhalten einen so genannten Dad joke Diese „jokes“ können manchmal sehr lustig sein und sind in keiner Weise verletzend Größtenteils handelt es sich um Wortspiele. Ich habe eine DadJokeSequence zum Aufrufen der API erstellt. Der Witz ist in der eingehenden JSON-Antwort in dem Feld mit der Bezeichnung joke enthalten.
Die Reihenfolge ist wie folgt:
Und der Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="DadJokeSequence" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<header name="Accept" scope="transport" value="application/json"/>
<call>
<endpoint>
<http method="get" uri-template="https://icanhazdadjoke.com/">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>-1</progressionFactor>
<maximumDuration>0</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</call>
<log level="custom">
<property expression="json-eval($.joke)" name="Today's Super Funny Dad Joke brought to you by Yenlo"/>
</log>
</sequence>
Also nutzen wir das. Und versuchen wir, ob wir 5 dieser Dad jokes im Abstand von fünf Sekunden auf unsere Konsole schicken können.
[2021-09-27 13:30:44,070] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = Why was Pavlov's beard so soft? Because he conditioned it.
[2021-09-27 13:30:49,032] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = Ever wondered why bees hum? It's because they don't know the words.
[2021-09-27 13:30:54,037] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = Every machine in the coin factory broke down all of a sudden without explanation. It just doesn’t make any cents.
[2021-09-27 13:30:59,032] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = Cosmetic surgery used to be such a taboo subject.
Now you can talk about Botox and nobody raises an eyebrow.
[2021-09-27 13:31:04,032] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = Chances are if you' ve seen one shopping center, you've seen a mall.
Wie Sie sehen können, ist das ziemlich einfach. Im nächsten Beispiel ist vorgesehen, dass das Programm nur einmal beim Start ausgeführt wird.
Und wie Sie sehen können, wird in den untenstehenden Fragmenten, die beim Start von der Konsole kopiert wurden, der dad joke angezeigt. Sie können eine solche Task auch manuell planen. Sie können die Task-Implementierung über Ihre Verwaltungsoberfläche öffnen und sie manuell planen. Das Seltsame ist, dass in Integration Studio Intervall 0, aber in der Management UI Intervall 1 angezeigt wird.
[2021-09-27 13:43:56,114] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = Why did the cookie cry?
Because his mother was a wafer so long
CRON
Die EI Schedule Task-Implementierung basiert auf Quartz Scheduler. Ein Cron-Ausdruck in Quartz ist eine Zeichenkette, die aus 6 oder 7 durch Leerzeichen getrennten Feldern besteht. Dazu gibt es ein hilfreiches Tutorial im Internet.
Diese Task wird das ganze Jahr lang täglich sowie stündlich alle zwei Minuten ausgeführt.
[2021-09-27 14:44:00,248] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = I gave all my dead batteries away today, free of charge.
[2021-09-27 14:46:00,177] INFO {org.apache.synapse.mediators.builtin.LogMediator} - Today's Super Funny Dad Joke brought to you by Yenlo = What is a centipedes's favorite Beatle song? I want to hold your hand, hand, hand, hand...
Jedes Feld kann jeden der zulässigen Werte enthalten, zusammen mit verschiedenen Kombinationen der zulässigen Sonderzeichen für dieses Feld. Die Felder sind die folgenden:
Field Name | Mandatory | Allowed Values | Allowed Special Characters |
Seconds | YES | 0-59 | , – * / |
Minutes | YES | 0-59 | , – * / |
Hours | YES | 0-23 | , – * / |
Day of month | YES | 1-31 | , – * ? / L W |
Month | YES | 1-12 of JAN-DEC | , – * / |
Day of week | YES | 1-7 of SUN-SAT | , – * ? / L # |
YEAR | NO | leeg, 1970-2099 | , – * / |
Was können wir mit diesen Sonderzeichen bewirken? Den Unterlagen zufolge ist Folgendes möglich:
- ( „alle Werte“ ) – wird verwendet, um alle Werte in einem Feld auszuwählen.
- „?“ ( „kein spezifischer Wert“ ) – ist hilfreich, wenn Sie etwas in einem der beiden Felder angeben müssen, in denen das Zeichen erlaubt ist, aber in anderen nicht.
- „-“ dient zur Angabe von Bereichen.
- „“, wird verwendet, um zusätzliche Werte anzugeben.
- / – zur Festlegung von Inkrementen verwendet.
- L ( „last“ ) – hat in jedem der beiden Felder, in denen es erlaubt ist, eine andere Bedeutung. Beispielsweise bedeutet der Wert „L“ im Feld „Tag des Monats“ „den letzten Tag des Monats“ – Tag 31 für Januar, Tag 28 für Februar in Nicht-Schaltjahren.
- W ( „Wochentag“ ) – wird verwendet, um den Wochentag (Montag-Freitag) anzugeben, der dem angegebenen Tag am nächsten liegt.
- Die Symbole „L“ und „W“ können auch im Feld für den Tag des Monats kombiniert werden und ergeben „LW“, was *“letzter Wochentag des Monats „* bedeutet.
- # – wird verwendet, um „den n-ten“ XXX-Tag des Monats anzugeben. Beispielsweise bedeutet der Wert „6#3“ im Feld „Wochentag “ „der dritte Freitag des Monats“ (Tag 6 = Freitag und „#3“ = der 3. im Monat).
Wie Sie sehen (ich habe den obigen Beitrag gekürzt), gibt es sehr schöne Kombinationen, die Sie ausprobieren können. Erinnert ein wenig an die Grundidee von RegEx. In manchen Fällen kann man mit verschiedenen Kombinationen sogar das gleiche Ergebnis erzielen.
Einige Beispiele
In diesem Beispiel werden Tasks für jede Minute geplant.
Hier geht es hingegen um Tasks, die alle 10 Sekunden durchgeführt werden sollen.
Diese Task soll zwischen der 10. und 12. Minute der vollen Stunde ausgeführt werden. Und zwar bis 12:50 Uhr.
Letztes Beispiel: alle 10 Sekunden zwischen der 33. und 35. Minute der vollen Stunde zwischen 14 und 15 Uhr (14-15) im September (dem neunten Monat) eines jeden Jahres.
Eine knfflige Sache
Die Arbeit mit Quartz Cron-Befehlen kann ein wenig knifflig sein. Es hat eine Weile gedauert, bis ich einige Einstellungen herausgefunden habe, und dabei habe ich keine komplexen Kombinationen ausprobiert. Es gibt viele Möglichkeiten, aber nicht alle sind leicht nachzuvollziehen. Wenn Sie die Einstellungen selbst ausprobieren und integrieren, werden Sie feststellen, welches Szenario funktioniert und welches nicht (die Konsole zeigt eine Fehlermeldung an).
Ich hoffe, ich konnte Ihnen einen besseren Zugang zur Quartz Implementierung in WSO2 Enterprise Integrator 6.6.0 verschaffen.
Möchten Sie mehr über WSO2 Enterprise Integrator erfahren? Schauen Sie sich eine unserer Schulungen an.