亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Inhaltsverzeichnis
Was sind Event Sourcing und CQRs?
Wie kann ich es in Java implementieren? Verwenden von Axon Framework
Abh?ngigkeiten hinzufügen (Maven)
Beispiel: Bankkontoübertragung
1. Definieren Sie Ereignisse
2. Aggregat - Schreiben Sie ein Modell
3. Ereignisverarbeitung (Modell Update Reading Modell)
4. Lesen Sie die Modellentit?t (für Abfrage)
5. Abfragen Sie die Schnittstelle
Wann kann Event -Sourcing CQRs verwendet werden?
Dinge zu beachten
Zusammenfassen
Heim Java javaLernprogramm Ereignisbeschaffung und CQRS -Muster in Java

Ereignisbeschaffung und CQRS -Muster in Java

Jul 29, 2025 am 12:34 AM
java

Die Rückverfolgbarkeit der Ereignisse und CQRs eignen sich für komplexe Gesch?ftssysteme. 1. Ereignisverfolgbarkeit bietet vollst?ndige Prüfungs- und Zeitreisef?higkeiten, indem Ereignissequenzrekonstruktionsstatus sparen, jedoch die Komplexit?t der Abfrage erh?ht. 2. CQRS trennt Lese- und Schreibmodelle, um die Skalierbarkeit und Leistung zu verbessern, führt jedoch die endgültige Konsistenz ein. 3. In Java kann Axon Framework in Kombination mit Spring Boot unter Verwendung von @aggregate implementiert werden, um Befehle zu verarbeiten, @EventSourcingHandler -Updates Status und @EventHandler Builds Lesemodelle; V. 5. Achten Sie auf die Unver?nderlichkeit des Ereignisses, die Versionskontrolle, die endgültige Konsistenzverarbeitung und die Komplexit?t des Debuggens. Diese Architektur ist bei hohen Nachfragesystemen von gro?em Wert.

Ereignisbeschaffung und CQRS -Muster in Java

Event Sourcing und Befehlsabfrage Trennung von Verantwortlichkeiten (CQRs) sind zwei wichtige Modelle in modernen verteilten Systemen, die sich mit komplexer Gesch?ftslogik befassen und die Systemskalierbarkeit verbessern. Im Java -?kosystem k?nnen diese beiden Modi effizient implementiert werden. Das Folgende ist eine Analyse aus verschiedenen Aspekten von Konzepten, Anwendungsszenarien, Implementierungsmethoden und Vorsichtsma?nahmen.

Ereignisbeschaffung und CQRS -Muster in Java

Was sind Event Sourcing und CQRs?

1. Ereignisbeschaffung

In herk?mmlichen Systemen speichern wir normalerweise nur den aktuellen Status der Entit?t (wie die Benutzerbilanz von 100 Yuan). Die Kernidee der Ereignisverfolgung ist: Nicht direkt den Zustand zu retten, sondern die Abfolge der Ereignisse zu retten, die zu Zustands?nderungen führen .

Beispielsweise wird die Kontostand?nderung in einem Benutzerkonto nicht direkt mit dem Saldo -Feld aktualisiert, sondern Datens?tze:

Ereignisbeschaffung und CQRS -Muster in Java
  • MoneyDeposited(amount=50)
  • MoneyWithdrawn(amount=20)

Der Staat wird durch Wiederholung dieser Ereignisse rekonstruiert.

Vorteil:

Ereignisbeschaffung und CQRS -Muster in Java
  • Komplettes Prüfprotokoll
  • Einfach zu debuggen und zurückzuziehen
  • Unterstützen Sie Zeitreisen (rekonstruiert jederzeit den Status)

Mangel:

  • Die Abfrageleistung kann sinken (Wiederholungsereignis erforderlich)
  • Komplexer Ereignisversionsverwaltung
  • Hohe Schwelle für Anf?nger

2. CQRS (Befehlsabfrageverantwortung Segregation)

CQRS trennt die Les- und Schreibvorg?nge des Systems:

  • Befehl : Daten ?ndern, Modell schreiben (Modell schreiben)
  • Abfrage : Daten lesen, entsprechend dem Lesemodell (Modell lesen)

Dies ist nicht nur Hierarchie, sondern erm?glicht auch verschiedene Datenmodelle, Datenbanken und sogar Technologie -Stapel, um Lesen und Schreiben zu verarbeiten.

Typische Struktur:

 Client → Befehl → Befehlshandler → Ereignisse → Event Store
                     ↓
               Ereignishandler → Modell aktualisieren (z. B. SQL, Elasticsearch)
                     ↓
Client ← Abfrage ← Modell lesen

Vorteil:

  • Modelle lesen und schreiben k?nnen unabh?ngig optimiert werden
  • Einfach zu skalieren (z. B. mehr Lesen und weniger Szenarien k?nnen den Abfragedienst in einem Abfragedienst skalieren)
  • Eine klarere Aufteilung der Verantwortlichkeiten

Mangel:

  • Die Systemkomplexit?t nimmt zu
  • Es gibt eine Verz?gerung zwischen Lesen und Schreiben (endgültige Konsistenz)

Wie kann ich es in Java implementieren? Verwenden von Axon Framework

Axon ist das beliebteste Framework in Java zur Implementierung von Event Sourcing und CQRs und integriert sich gut in den Frühling.

Abh?ngigkeiten hinzufügen (Maven)

 <De vorangehen>
    <gruppe> org.axonframework </Groupid>
    <artifactid> Axon-Spring-Boot-Starter </artifactid>
    <version> 4.6.0 </Version>
</abh?ngig>

Beispiel: Bankkontoübertragung

1. Definieren Sie Ereignisse
 ?ffentliche Klasse MoneyDepoStedEvent {
    Public Final String AccountID;
    ?ffentliche endgültige doppelte Menge;

    ?ffentliches Geldverlust (String AccountID, Doppelbetrag) {
        this.accountID = AccountID;
        this.amount = Menge;
    }
}

?ffentliche Klasse MoneywithDrawnEvent {
    Public Final String AccountID;
    ?ffentliche endgültige doppelte Menge;

    ?ffentliches Geld mit
        this.accountID = AccountID;
        this.amount = Menge;
    }
}
2. Aggregat - Schreiben Sie ein Modell
 @Aggregat
?ffentliche Klasse BankAccount {

    @AggregateIdentifier
    private String AccountID;
    privates Doppelbilanz;

    public bankAccount () {} // von Axon verlangt

    // Befehlshandler
    @CommandHandler
    public bankAccount (createAccountCommand -Befehl) {
        // Ver?ffentlichung des Account Creation Event aggregatelifecycle.Apply (New AccountCreatedEvent (command.AccountID));
    }

    @CommandHandler
    public void Handle (EinzahlungMoneyCommand -Befehl) {
        if (command.Amount <= 0) {
            Neue IllegalArgumentException werfen ("Menge muss positiv sein");
        }
        Aggregatelifecycle.Apply (neuer GelddepositedEvent (command.accountid, command.amount));
    }

    @CommandHandler
    public void Handle (resctridMoneyCommand -Befehl) {
        if (command.amount> balance) {
            Neue IllegalStateException ("Unsufficial Funds") werfen;
        }
        Aggregatelifecycle.Apply (neues GeldwithDrawnEvent (command.accountid, command.Amount));
    }

    // Event Sourcing Handler - verwendet, um den Status @EventourcingHandler zu aktualisieren
    public void on (MoneyDepoStedEvent Ereignis) {
        this.balance = event.amount;
    }

    @EventsourcingHandler
    public void on (Geld mit Ereignis) {
        this.balance -= event.amount;
    }
}
3. Ereignisverarbeitung (Modell Update Reading Modell)
 @Komponente
?ffentliche Klasse AccountProjection {

    private endgültige Accountrepository Accountrepository;

    public AccountProjection (AccountRrepository Accountrepository) {
        this.accounTRepository = Accountrepository;
    }

    @EventHandler
    public void on (MoneyDepoStedEvent Ereignis) {
        AccountView -Konto = Accountrepository.findbyId (Event.AccountID)
            .Orelse (New AccountView (Event.AccountID, 0.0));
        Account.Balance = Event.Amount;
        Accountrepository.save (Konto);
    }

    @EventHandler
    public void on (Geld mit Ereignis) {
        AccountView -Konto = Accountrepository.findbyId (Event.AccountID)
            .orelsethrow ();
        Account.Balance -= Ereignis.Amount;
        Accountrepository.save (Konto);
    }
}
4. Lesen Sie die Modellentit?t (für Abfrage)
 @Juristische Person
?ffentliche Klasse AccountView {
    @Ausweis
    private String -ID;
    privates Doppelbilanz;

    // Konstruktoren, Getters, Setters
}
5. Abfragen Sie die Schnittstelle
 @Restcontroller
?ffentliche Klasse AccountQueryController {

    @Autowired
    private Accountrepository Accountrepository;

    @Getmapping ("/concusses/{id}")
    public AccountView getAccount (@PathVariable String -ID) {
        return Accountrepository.findbyId (id) .orelse (null);
    }
}

Wann kann Event -Sourcing CQRs verwendet werden?

  • Die Gesch?ftslogik ist komplex und erfordert eine Prüfverfolgung (wie Finanzen, Auftragssystem)
  • Lesen und Schreiben von Ladungen variieren stark und ben?tigen unabh?ngige Expansion
  • Das System muss "rückg?ngig machen", "Wiederholungen" und "Zeitreisen" unterstützen
  • In der Microservice -Architektur die Kommunikation zwischen Diensten durch Ereignis

?? Nicht empfohlen für die Verwendung mit einfachen Crud-Systemen, es wird überentwickelt.


Dinge zu beachten

  • Ereignis unver?nderlich : Nach der Ver?ffentlichung kann es nicht ge?ndert werden, und es k?nnen nur Vergütungsereignisse hinzugefügt werden.
  • Ereignisversionskontrolle : Wenn sich die Ereignisstruktur ?ndert, muss die Serialisierungskompatibilit?t oder Migration unterstützt werden.
  • Modellkonsistenz lesen : CQRS ist die endgültige Konsistenz, und das Front-End muss sich mit der Situation befassen, in der "der Betrieb erfolgreich ist, die Abfrage jedoch nicht aktualisiert wird".
  • Debugging -Schwierigkeitserh?hung : Tools sind erforderlich, um Event -Stream -Anzeigen, Wiederholungen usw. zu unterstützen.

Zusammenfassen

In Java k?nnen Event Sourcing und CQRs über das Axon -Framework leichter implementiert werden:

  • Verwenden Sie @Aggregate , um Schreibmodelle zu verwalten
  • Aktualisieren Sie den Aggregationsstatus mit @EventSourcingHandler
  • Verwenden Sie @EventHandler , um ein Lesemodell zu erstellen
  • Vollst?ndige Trennung von Befehlen und Abfragen

Obwohl die Komplexit?t eingeführt wird, ist diese Architektur in Systemen sehr wertvoll, die eine hohe überwachbarkeit und Skalierbarkeit erfordern.

Grunds?tzlich alles ist der Schlüssel zu verstehen, dass "Zustand das Ergebnis von Ereignissen ist" und dass "Lesen und Schreiben unterschiedliche Wege aufnehmen k?nnen".

Das obige ist der detaillierte Inhalt vonEreignisbeschaffung und CQRS -Muster in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Aufbau erholsamer APIs in Java mit Jakarta EE Aufbau erholsamer APIs in Java mit Jakarta EE Jul 30, 2025 am 03:05 AM

Setupamaven/GradleProjectWithjax-rsdependencies-?hnlich Jersey; 2. CreatearestresourcEUntationSuchas@pathand@Get; 3.ConfiguretheApplicationviaApplicationSubclitsorweb.xml;

Ein Entwicklerleitfaden für Java Project Management zu Maven für Java Ein Entwicklerleitfaden für Java Project Management zu Maven für Java Jul 30, 2025 am 02:41 AM

Maven ist ein Standardwerkzeug für Java -Projektmanagement und -aufbau. Die Antwort liegt in der Tatsache, dass Pom.xml verwendet wird, um Projektstruktur, Abh?ngigkeitsmanagement, Konstruktionslebenszyklusautomation und Plug-in-Erweiterungen zu standardisieren. 1. Verwenden Sie POM.xml, um Gruppen, Artefaktid, Version und Abh?ngigkeiten zu definieren; 2. Master -Kernbefehle wie MVNClean, Compile, Test, Paket, Installation und Bereitstellen; Fn. V. 5.

CSS -Beispiel für Dunkelmodus umschalten CSS -Beispiel für Dunkelmodus umschalten Jul 30, 2025 am 05:28 AM

Verwenden Sie zun?chst JavaScript, um die Einstellungen für Benutzersysteme und lokal gespeicherte Themeneinstellungen zu erhalten und das Seitenthema zu initialisieren. 1. Die HTML -Struktur enth?lt eine Schaltfl?che zum Ausl?sen von Themenwechsel. 2. CSS verwendet: root, um helle Themenvariablen zu definieren, .Dark-Mode-Klasse definiert dunkle Themenvariablen und wendet diese Variablen über var () an. 3.. JavaScript erkennt bevorzuge-farbige Scheme und liest LocalStorage, um das ursprüngliche Thema zu bestimmen. 4. Schalten Sie die Dark-Mode-Klasse im HTML-Element beim Klicken auf die Schaltfl?che und speichern Sie den aktuellen Status vor LocalStorage. 5. Alle Farb?nderungen werden mit einer übergangsanimation von 0,3 Sekunden begleitet, um den Benutzer zu verbessern

CSS -Dropdown -Menü Beispiel CSS -Dropdown -Menü Beispiel Jul 30, 2025 am 05:36 AM

Ja, ein gemeinsames CSS-Dropdown-Menü kann mit reinem HTML und CSS ohne JavaScript implementiert werden. 1. Verwenden Sie verschachtelte UL und Li, um eine Menüstruktur zu erstellen. 2. Verwenden Sie die: Hover Pseudo-Klasse, um die Anzeige und das Verstecken von Pulldown-Inhalten zu steuern. 3.. Setzen Sie Position: Relativ für Eltern -Li, und das Untermenü wird unter Verwendung von Position positioniert: absolut; 4. Das untergeordnete Standards ist angezeigt: Keine, die angezeigt wird: Block, wenn sie schwebend sind; 5. Multi-Level-Pulldown kann durch Verschachtelung, kombiniert mit dem übergang und Fade-In-Animationen erzielt und an mobile Terminals mit Medienabfragen angepasst werden. Die gesamte L?sung ist einfach und erfordert keine JavaScript -Unterstützung, was für gro?e geeignet ist

Wie benutze ich Java Messagedigest für Hashing (MD5, SHA-256)? Wie benutze ich Java Messagedigest für Hashing (MD5, SHA-256)? Jul 30, 2025 am 02:58 AM

Um Hash -Werte mit Java zu generieren, kann es über die MessagedIGest -Klasse implementiert werden. 1. Holen Sie sich eine Instanz des angegebenen Algorithmus wie MD5 oder SHA-256; 2. Rufen Sie die Methode .update () auf, um die zu verschlüsselnden Daten zu übergeben. 3. Nennen Sie die Methode .Digest (), um ein Hash -Byte -Array zu erhalten. 4. Umwandeln Sie das Byte -Array in eine hexadezimale Zeichenfolge zum Lesen; Lesen Sie für Eingaben wie gro?e Dateien in Stücken und rufen Sie .update () mehrmals auf. Es wird empfohlen, SHA-256 anstelle von MD5 oder SHA-1 zu verwenden, um die Sicherheit zu gew?hrleisten.

Python Parse Datum String Beispiel Python Parse Datum String Beispiel Jul 30, 2025 am 03:32 AM

Verwenden Sie datetime.strptime (), um Datumszeichenfolgen in DateTime -Objekt umzuwandeln. 1. Grundnutzung: Analyse "2023-10-05" als DateTime-Objekt über "%y-%M-%d"; 2. unterstützt mehrere Formate wie "%M/%d/%y", um amerikanische Daten zu analysieren, "%d/%m/%y", um britische Daten zu analysieren ",%b%d,%y%i:%m%p", um die Zeit mit AM/PM zu analysieren; 3.. Verwenden Sie DateUtil.Parser.Parse (), um unbekannte Formate automatisch zu schlie?en; 4. Verwenden Sie .D

VSCODE Settings.json Standort VSCODE Settings.json Standort Aug 01, 2025 am 06:12 AM

Die Datei "Settings.JSON" befindet sich auf dem Pfad auf Benutzerebene oder Arbeitsbereichsebene und wird verwendet, um die VSCODE-Einstellungen anzupassen. 1. Benutzer-Level-Pfad: Windows ist C: \ Benutzer \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS is /users//library/applicationsupport/code/user/settings.json, Linux is /home/.config/code/usser/setings.json; 2. Pfad auf Arbeitsbereichsebene: .VSCODE/Einstellungen im Projekt Root Directory

Sublime Text automatisch HTML -Tags schlie?en Sublime Text automatisch HTML -Tags schlie?en Jul 30, 2025 am 02:41 AM

Durch die Installation des EMMET-Plug-Ins k?nnen Sie das intelligente automatische Schlie?en von Tags erreichen und die Abkürzungssyntax unterstützen. 2. Aktivieren Sie "auto_match_enabled": true, damit Sublime einfache Tags automatisch vervollst?ndigen kann. 3. Verwenden Sie Alt. (Gewinn) oder Strg -Verschiebung. (MAC) Verknüpfungsschlüssel zum manuellen Schlie?en des aktuellen Tags - Es wird empfohlen, Emmet im t?glichen Leben zu verwenden. Die beiden letztgenannten Methoden k?nnen kombiniert werden, was effizient und einfach eingestellt ist.

See all articles