Konzept Polling
Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.
Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.
Java Bibliothek / IT-System
Name | Art | Version |
---|---|---|
|
Bibliothek |
v3.2.x |
1. Einleitung
Dieses Dokument beschreibt die konzeptionellen Grundlagen des Bausteins Polling.
In Geschäftsanwendung und Service-Gateway müssen manchmal Polling-basierte Schnittstellen angesprochen werden. Polling bedeutet, dass in regelmäßigen Intervallen neue Daten zur Verarbeitung abgeholt werden. Die Schnittstellen nutzen unterschiedliche technische Verfahren wie IMAP, Web-Services oder proprietäre Datenbank-basierte Schnittstellen, weitere sind denkbar.
Aus Gründen der Ausfallsicherheit soll die Abholung der Daten von mehreren Instanzen einer Anwendung durchgeführt werden. Diese Instanzen müssen synchronisiert werden, sodass Nachrichten nicht mehrfach verarbeitet werden. Die zugrunde liegenden Schnittstellen-Technologien bieten dafür kein Standardverfahren an.
In Abbildung 1 wird diese Situation dargestellt.
2. Verfahren für das Polling
Das Polling erfolgt über mehrere Instanzen der Anwendung. Es darf zu einem Zeitpunkt aber nur eine Instanz das Polling aktiv durchführen, um das mehrfache Abrufen von Daten zu verhindern. Die Abstimmung darüber, welche Instanz das Polling aktiv durchführt, erfolgt automatisch.
Hierzu verwaltet jede Instanz den Zeitstempel ihrer letzten Polling-Aktivität und stellt den seit ihrer letzten Polling-Aktivität vergangenen Zeitraum per JMX bereit. Der Zeitraum wird anhand des Zeitstempels und der aktuellen Systemzeit beim Abruf des Wertes über JMX ermittelt. Es wird der Zeitraum und nicht der Zeitpunkt über JMX bereitgestellt, da hiermit das Problem nicht synchron laufender Uhren auf den einzelnen Servern keine Probleme bereitet.
Der Ablauf des Pollings in jeder Instanz ist dann wie folgt:
-
Es werden die seit der letzten Polling-Aktivität vergangenen Zeiträume aller anderen Instanzen über JMX ermittelt.
-
Wenn der Zeitraum seit der letzten Polling-Aktivität einer anderen Instanz kleiner als eine Wartezeit X ist, wird die Verarbeitung abgebrochen.
-
In allen anderen Fällen (keine Instanz erreichbar, keine Zeiträume gesetzt, alle Zeiträume größer als eine Wartezeit X) wird mit der Verarbeitung fortgefahren.
-
Zu Beginn des Abrufs von Nachrichten wird der eigene Zeitstempel auf den aktuellen Zeitpunkt gesetzt.
-
Während der Verarbeitung der einzelnen Nachrichten wird der Zeitstempel aktualisiert.
-
Am Ende der Verarbeitung aller abgerufenen Nachrichten wird der Zeitstempel nochmals aktualisiert.
In Abbildung 2 wird das Verfahren dargestellt.
Dieses Verfahren bietet im Regelfall einen sehr guten Schutz gegen Mehrfachverarbeitung. Es kann aber z.B. bei Netzproblemen dazu kommen, dass mehrere Instanzen parallel arbeiten. Dies lässt sich prinzipiell durch die Abstimmung per JMX nicht zu 100% ausschließen.
Daher ist es nötig, im Rahmen der Verarbeitung eingegangener Daten weitere Maßnahmen zu treffen. Hierzu wird in der Geschäftsanwendung, die die Nachrichten verarbeitet, eine Tabelle für alle eingehenden Daten in der Datenbank angelegt.
Eine solche Tabelle ist häufig bereits vorhanden. In dieser Tabelle wird eine zusätzliche Spalte hinzugefügt, die einen Schlüssel aus dem Fremdsystem aufnimmt. Dieser Fremdsystemschlüssel kann je nach anlieferndem System z.B. die SMTP-Message-ID, ein Datenbankschlüssel oder auch ein Hashwert sein. Die Spalte wird mit einem Unique Constraint versehen. So können datenbankseitig Duplikate sicher erkannt werden.
Dafür ist es notwendig, diesen Fremdsystemschlüssel bis in die Geschäftsanwendung zu transportieren, also z.B. vom Mail-Server über das Mail-Gateway. Da nur die Datenbank als transaktionales System die Eindeutigkeit der IDs garantieren kann, wird dies in Kauf genommen.
In <<polling-nachrichten-tabelle> wird das noch einmal illustriert.
Näheres zu den Nutzungsvorgaben des Bausteins findet sich in dem Polling - Nutzungsvorgaben.