Es gibt viele Muster, die mit dem Microservices-Muster zusammenhängen. Die monolithische Architektur ist eine Alternative zur Microservice-Architektur. Die anderen Muster behandeln Probleme, die beim Anwenden der Microservice-Architektur auftreten. Das Visitor [1] Designmuster ist eines der dreiundzwanzig bekannten GoF-Entwurfsmuster, die beschreiben, wie wiederkehrende Entwurfsprobleme gelöst werden können, um flexible und wiederverwendbare objektorientierte Software zu entwerfen, d. h. Objekte, die einfacher zu implementieren, zu ändern, zu testen und wiederzuverwenden sind. Obwohl dieses Muster für die Verarbeitung von HTTP-Anforderungen am beliebtesten ist, ist es im Allgemeinen sehr hilfreich für alles, was einen konfigurierbaren asynchronen Verarbeitungsworkflow erfordert. Auf unsere RESTful Service-Schicht angewendet, können wir für jede Methode die gleiche Art von Middleware registrieren. Das Besuchermuster erfordert eine Programmiersprache, die einzelne Dispatche unterstützt, wie es gängige objektorientierte Sprachen (z. B.
C++, Java, Smalltalk, Objective-C, Swift, JavaScript, Python und C`) tun. Berücksichtigen Sie unter dieser Bedingung zwei Objekte eines Klassentyps. das eine wird als das Element bezeichnet, und das andere ist Besucher. Ich schaffe zwei Arbeitsplätze: job1 und job2. Dann werde ich es mit TaskScheduler planen. Dieses Mal verwende ich einen Cron-Ausdruck, um den Auftrag1 in jedem Fünf-Sekunden-Intervall und job2 pro Sekunde zu planen. Job1 bleibt 10 Sekunden hängen und wir werden sehen, dass Job2 immer noch reibungslos und ohne Unterbrechung läuft. Wir sehen, dass sowohl Aufgabe1 als auch Aufgabe 2 von einem Threadpool verarbeitet werden, der mit ThreadPoolTaskScheduler erstellt wird. Sie entwickeln eine serverseitige Unternehmensanwendung. Es muss eine Vielzahl von verschiedenen Clients unterstützen, einschließlich Desktop-Browser, mobile Browser und native mobile Anwendungen.
Die Anwendung kann auch eine API verfügbar machen, die Drittanbieter verwenden können. Es kann auch mit anderen Anwendungen über Web-Dienste oder einen Nachrichtenbroker integrieren. Die Anwendung verarbeitet Anforderungen (HTTP-Anforderungen und Nachrichten) durch Ausführen von Geschäftslogik. Zugriff auf eine Datenbank; Austausch von Nachrichten mit anderen Systemen; und gibt eine HTML/JSON/XML-Antwort zurück. Es gibt logische Komponenten, die unterschiedlichen Funktionsbereichen der Anwendung entsprechen. Um eine lose Kopplung zu gewährleisten, verfügt jeder Dienst über eine eigene Datenbank. Die Aufrechterhaltung der Datenkonsistenz zwischen Diensten ist eine Herausforderung, da zwei Phasen-Commit/verteilte Transaktionen für viele Anwendungen keine Option sind. Eine Anwendung muss stattdessen das Saga-Muster verwenden.
Ein Dienst veröffentlicht ein Ereignis, wenn sich seine Daten ändern. Andere Dienste nutzen dieses Ereignis und aktualisieren ihre Daten. Es gibt mehrere Möglichkeiten, Daten zuverlässig zu aktualisieren und Ereignisse zu veröffentlichen, einschließlich Event Sourcing und Transaction Log Tailing. ScheduledExecutorService und TaskScheduler funktionieren auf die gleiche Weise. Der einzige Unterschied zu ersterem ist die Java-Bibliothek und letztere ist das Spring-Framework. Wenn sich die Anwendung also im Frühjahr befindet, kann der TaskScheduler eine bessere Option zum Planen von Aufträgen sein. Ein Nachteil dieses Musters besteht jedoch darin, dass Erweiterungen der Klassenhierarchie dadurch erschwert werden, da neue Klassen in der Regel eine neue Besuchsmethode erfordern, die jedem Besucher hinzugefügt werden muss.

