<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Event-Driven_Architecture_%28EDA%29</id>
	<title>Event-Driven Architecture (EDA) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Event-Driven_Architecture_%28EDA%29"/>
	<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Event-Driven_Architecture_(EDA)&amp;action=history"/>
	<updated>2026-05-15T09:17:34Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in dev.kaibel.net</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://dev.kaibel.net/index.php?title=Event-Driven_Architecture_(EDA)&amp;diff=84&amp;oldid=prev</id>
		<title>PhilKa: Die Seite wurde neu angelegt: „= Event-Driven Architecture (EDA) =  Die &#039;&#039;&#039;Event-Driven Architecture&#039;&#039;&#039; (kurz: &#039;&#039;&#039;EDA&#039;&#039;&#039;, deutsch: &#039;&#039;&#039;Ereignisgesteuerte Architektur&#039;&#039;&#039;) ist ein &#039;&#039;&#039;Architekturstil&#039;&#039;&#039; in der Softwareentwicklung, bei dem der Informationsfluss durch das &#039;&#039;&#039;Eintreten und die Verarbeitung von Ereignissen&#039;&#039;&#039; gesteuert wird.    Anstatt dass Komponenten direkt miteinander interagieren, kommunizieren sie über &#039;&#039;&#039;Ereignisse&#039;&#039;&#039; (&#039;&#039;Events&#039;&#039;), die von einem oder mehreren &#039;&#039;&#039;Event-H…“</title>
		<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Event-Driven_Architecture_(EDA)&amp;diff=84&amp;oldid=prev"/>
		<updated>2025-10-30T11:44:56Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Event-Driven Architecture (EDA) =  Die &amp;#039;&amp;#039;&amp;#039;Event-Driven Architecture&amp;#039;&amp;#039;&amp;#039; (kurz: &amp;#039;&amp;#039;&amp;#039;EDA&amp;#039;&amp;#039;&amp;#039;, deutsch: &amp;#039;&amp;#039;&amp;#039;Ereignisgesteuerte Architektur&amp;#039;&amp;#039;&amp;#039;) ist ein &amp;#039;&amp;#039;&amp;#039;Architekturstil&amp;#039;&amp;#039;&amp;#039; in der Softwareentwicklung, bei dem der Informationsfluss durch das &amp;#039;&amp;#039;&amp;#039;Eintreten und die Verarbeitung von Ereignissen&amp;#039;&amp;#039;&amp;#039; gesteuert wird.    Anstatt dass Komponenten direkt miteinander interagieren, kommunizieren sie über &amp;#039;&amp;#039;&amp;#039;Ereignisse&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Events&amp;#039;&amp;#039;), die von einem oder mehreren &amp;#039;&amp;#039;&amp;#039;Event-H…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Event-Driven Architecture (EDA) =&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Event-Driven Architecture&amp;#039;&amp;#039;&amp;#039; (kurz: &amp;#039;&amp;#039;&amp;#039;EDA&amp;#039;&amp;#039;&amp;#039;, deutsch: &amp;#039;&amp;#039;&amp;#039;Ereignisgesteuerte Architektur&amp;#039;&amp;#039;&amp;#039;) ist ein &amp;#039;&amp;#039;&amp;#039;Architekturstil&amp;#039;&amp;#039;&amp;#039; in der Softwareentwicklung, bei dem der Informationsfluss durch das &amp;#039;&amp;#039;&amp;#039;Eintreten und die Verarbeitung von Ereignissen&amp;#039;&amp;#039;&amp;#039; gesteuert wird.  &lt;br /&gt;
&lt;br /&gt;
Anstatt dass Komponenten direkt miteinander interagieren, kommunizieren sie über &amp;#039;&amp;#039;&amp;#039;Ereignisse&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Events&amp;#039;&amp;#039;), die von einem oder mehreren &amp;#039;&amp;#039;&amp;#039;Event-Handlern&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;Subscribers&amp;#039;&amp;#039;&amp;#039; verarbeitet werden.  &lt;br /&gt;
&lt;br /&gt;
== Grundprinzip ==&lt;br /&gt;
&lt;br /&gt;
Im Zentrum der ereignisgesteuerten Architektur steht die Idee, dass Systeme auf das &amp;#039;&amp;#039;&amp;#039;Eintreten von Ereignissen&amp;#039;&amp;#039;&amp;#039; reagieren, anstatt zyklisch Zustände zu prüfen oder direkt Funktionen aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Ein „Event“ ist dabei eine Nachricht, die signalisiert, dass etwas passiert ist (z. B. „Bestellung eingegangen“, „Sensorwert geändert“, „Benutzer klickte auf Button“).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+--------------------+         +--------------------+         +--------------------+&lt;br /&gt;
|     Event Source   | -----&amp;gt;  |     Event Broker   | -----&amp;gt;  |     Event Handler  |&lt;br /&gt;
| (Producer/Sender)  |         | (Message Queue)    |         | (Consumer/Listener)|&lt;br /&gt;
+--------------------+         +--------------------+         +--------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hauptkomponenten ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Komponente !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Event Producer&amp;#039;&amp;#039;&amp;#039; || Erzeugt Ereignisse (z. B. Benutzeraktionen, Sensoren, Microservices)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Event Channel / Broker&amp;#039;&amp;#039;&amp;#039; || Transportiert Ereignisse asynchron (z. B. Message Queue, Event Bus)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Event Consumer&amp;#039;&amp;#039;&amp;#039; || Reagiert auf bestimmte Ereignisse und führt entsprechende Aktionen aus&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Event Store&amp;#039;&amp;#039;&amp;#039; || Optionale persistente Speicherung vergangener Ereignisse (z. B. für Event Sourcing)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ablauf ==&lt;br /&gt;
1. Ein Producer erzeugt ein Event („Bestellung wurde aufgegeben“).  &lt;br /&gt;
2. Das Event wird an einen Broker (z. B. RabbitMQ, Kafka) gesendet.  &lt;br /&gt;
3. Der Broker leitet das Event an alle interessierten Consumer weiter.  &lt;br /&gt;
4. Jeder Consumer reagiert unabhängig auf das Ereignis.  &lt;br /&gt;
&lt;br /&gt;
== Beispiel in Pseudo-C++ ==&lt;br /&gt;
Ein vereinfachtes Beispiel für ein ereignisgesteuertes System:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;functional&amp;gt;&lt;br /&gt;
#include &amp;lt;map&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class EventBus {&lt;br /&gt;
    std::map&amp;lt;std::string, std::vector&amp;lt;std::function&amp;lt;void(std::string)&amp;gt;&amp;gt;&amp;gt; subscribers;&lt;br /&gt;
public:&lt;br /&gt;
    void subscribe(const std::string&amp;amp; event, std::function&amp;lt;void(std::string)&amp;gt; handler) {&lt;br /&gt;
        subscribers[event].push_back(handler);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void publish(const std::string&amp;amp; event, const std::string&amp;amp; data) {&lt;br /&gt;
        for (auto&amp;amp; handler : subscribers[event]) {&lt;br /&gt;
            handler(data);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    EventBus bus;&lt;br /&gt;
&lt;br /&gt;
    // Subscriber registrieren&lt;br /&gt;
    bus.subscribe(&amp;quot;order_created&amp;quot;, [](std::string msg){&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;E-Mail-Service: Sende Bestellbestätigung für &amp;quot; &amp;lt;&amp;lt; msg &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    bus.subscribe(&amp;quot;order_created&amp;quot;, [](std::string msg){&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;Lager-Service: Reserviere Artikel für &amp;quot; &amp;lt;&amp;lt; msg &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Event auslösen&lt;br /&gt;
    bus.publish(&amp;quot;order_created&amp;quot;, &amp;quot;Bestellung #1234&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
E-Mail-Service: Sende Bestellbestätigung für Bestellung #1234&lt;br /&gt;
Lager-Service: Reserviere Artikel für Bestellung #1234&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Architekturmuster ==&lt;br /&gt;
Ereignisgesteuerte Architekturen lassen sich in verschiedene Unterarten gliedern:&lt;br /&gt;
&lt;br /&gt;
=== 1. Einfaches Event-Notification-Modell ===&lt;br /&gt;
Ein Sender informiert Empfänger direkt über ein Ereignis (z. B. [[Observer-Entwurfsmuster]]).&lt;br /&gt;
&lt;br /&gt;
=== 2. Event-Carried State Transfer ===&lt;br /&gt;
Das Event enthält die notwendigen Daten, damit Empfänger unabhängig agieren können.&lt;br /&gt;
&lt;br /&gt;
=== 3. Event Sourcing ===&lt;br /&gt;
Zustände werden nicht direkt gespeichert, sondern als Abfolge von Ereignissen (z. B. „Konto eröffnet“, „Geld eingezahlt“).  &lt;br /&gt;
Der aktuelle Zustand wird aus allen Events rekonstruiert.&lt;br /&gt;
&lt;br /&gt;
=== 4. Complex Event Processing (CEP) ===&lt;br /&gt;
Systeme analysieren Muster in einer Vielzahl von Ereignissen in Echtzeit (z. B. Anomalieerkennung, IoT-Systeme).&lt;br /&gt;
&lt;br /&gt;
== Vorteile ==&lt;br /&gt;
* Hohe **Entkopplung** zwischen Komponenten  &lt;br /&gt;
* Bessere **Skalierbarkeit** und **Asynchronität**  &lt;br /&gt;
* Gute **Erweiterbarkeit** – neue Event-Handler können leicht hinzugefügt werden  &lt;br /&gt;
* Ideal für **Microservices** und **verteilte Systeme**&lt;br /&gt;
&lt;br /&gt;
== Nachteile ==&lt;br /&gt;
* Komplexeres Debugging und Monitoring  &lt;br /&gt;
* Schwierige Transaktions- und Konsistenzsicherung  &lt;br /&gt;
* Höherer Aufwand für Event-Schema-Management  &lt;br /&gt;
* Event-Reihenfolge und -Duplikate müssen berücksichtigt werden&lt;br /&gt;
&lt;br /&gt;
== Typische Implementierungen ==&lt;br /&gt;
* Message Broker / Event Bus Systeme:&lt;br /&gt;
  * **Apache Kafka**&lt;br /&gt;
  * **RabbitMQ**&lt;br /&gt;
  * **ActiveMQ**&lt;br /&gt;
  * **AWS SNS/SQS**&lt;br /&gt;
  * **Azure Event Hub**&lt;br /&gt;
* Asynchrone Frameworks:&lt;br /&gt;
  * **Node.js (Event Loop)**&lt;br /&gt;
  * **Boost.Asio (C++)**&lt;br /&gt;
  * **.NET Event System**&lt;br /&gt;
  * **Akka (Scala/Java)**&lt;br /&gt;
&lt;br /&gt;
== Vergleich zu anderen Architekturstilen ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Architekturstil !! Merkmale !! Kommunikation&lt;br /&gt;
|-&lt;br /&gt;
| [[Service-Oriented Architecture (SOA)]] || Dienste kommunizieren direkt über Schnittstellen || synchron (Request/Response)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Event-Driven Architecture&amp;#039;&amp;#039;&amp;#039; || Dienste reagieren auf Ereignisse || asynchron (Publish/Subscribe)&lt;br /&gt;
|-&lt;br /&gt;
| [[Reactor-Entwurfsmuster]] || Low-Level-Ereignissteuerung (z. B. Socket-I/O) || synchron, nicht-blockierend&lt;br /&gt;
|-&lt;br /&gt;
| [[Observer-Entwurfsmuster]] || Lokales Ereignissystem in Objektorientierung || direkt in einer Anwendung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Beispielhafte Anwendungsbereiche ==&lt;br /&gt;
* Microservices-Kommunikation  &lt;br /&gt;
* IoT- und Sensordatenverarbeitung  &lt;br /&gt;
* Finanztransaktionen und Echtzeit-Analysen  &lt;br /&gt;
* Logging- und Monitoring-Systeme  &lt;br /&gt;
* Chat- oder Benachrichtigungssysteme  &lt;br /&gt;
&lt;br /&gt;
== Erweiterte Konzepte ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Event Choreography:&amp;#039;&amp;#039;&amp;#039; Dienste reagieren eigenständig auf Events (dezentrale Logik)  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Event Orchestration:&amp;#039;&amp;#039;&amp;#039; Zentrale Steuerung der Reaktionen auf Events (z. B. via Workflow Engine)  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Event Replay:&amp;#039;&amp;#039;&amp;#039; Nachträgliches Wiederholen von Events für Auditing oder Recovery  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Idempotenz:&amp;#039;&amp;#039;&amp;#039; Sicherstellung, dass doppelt verarbeitete Events keine fehlerhaften Zustände erzeugen&lt;br /&gt;
&lt;br /&gt;
== Beispielhafte Kombination mit Entwurfsmustern ==&lt;br /&gt;
* [[Observer-Entwurfsmuster]] – lokale Implementierung innerhalb eines Prozesses  &lt;br /&gt;
* [[Reactor-Entwurfsmuster]] – effiziente Ereignisverarbeitung auf Systemebene  &lt;br /&gt;
* [[Proactor-Entwurfsmuster]] – asynchrone Verarbeitung von I/O-Ereignissen  &lt;br /&gt;
* [[Mediator-Entwurfsmuster]] – Koordination von Events über zentrale Vermittler  &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Observer-Entwurfsmuster]]&lt;br /&gt;
* [[Reactor-Entwurfsmuster]]&lt;br /&gt;
* [[Proactor-Entwurfsmuster]]&lt;br /&gt;
* [[Publisher-Subscriber-Muster]]&lt;br /&gt;
* [[Service-Oriented Architecture (SOA)]]&lt;br /&gt;
* [[Microservices-Architektur]]&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
* O. Zimmermann et al.: *Architectural Decisions for Event-Driven Architectures*, IEEE Software (2020)  &lt;br /&gt;
* Martin Fowler: [https://martinfowler.com/articles/201701-event-driven.html What do you mean by “Event-Driven”?]  &lt;br /&gt;
* [https://en.wikipedia.org/wiki/Event-driven_architecture Wikipedia: Event-Driven Architecture]  &lt;br /&gt;
* *Enterprise Integration Patterns* – Gregor Hohpe, Bobby Woolf (2003)&lt;/div&gt;</summary>
		<author><name>PhilKa</name></author>
	</entry>
</feed>