Verwenden von Observable- und Enumerable-Ereignisquellen und -senken (StreamInsight)

StreamInsight bietet Unterstützung für Ereignisquellen und Ereignissenken, von denen die IObservable- und IEnumerable-Schnittstellen unterstützt werden. Diese Schnittstellen sind die wichtigsten allgemeinen Vereinbarungen in .NET Framework für das Abrufen (IEnumerable) und Übergeben (IObservable) von Daten zwischen den Komponenten einer Anwendung.

Die IEnumerable- und IEnumerator-Schnittstellen sind .NET-Entwicklern bereits vertraut. Die IObservable- und IObserver-Schnittstellen wurden hingegen erst vor Kurzem in .NET Framework 4 integriert. Das IObservable-Entwicklungsmodell basiert auf dem Observable/Observer-Designmuster. In diesem Designmuster gilt Folgendes:

  • Ein Observer-Element ist ein Objekt, das nach einer Benachrichtigung verlangt, wenn sich der Zustand eines anderen Objekts ändert.

  • Ein Observable-Element ist eine übergabebasierte Sequenz, die möglicherweise für ein anderes Objekt von Interesse ist.

In einer StreamInsight-Anwendung handelt es sich beim Observable-Objekt um die Ereignisquelle. Die Abfrage funktioniert wie ein Observer-Objekt für diese Quelle und stellt seine Ergebnisse als Observable-Objekt für die Ereignissenke bereit, die wiederum als Observer-Objekt der Abfrage als Quelle gilt. Weitere Informationen finden Sie unter Erkunden des Observer-Entwurfsmusters (möglicherweise in englischer Sprache) auf MSDN.

Vom Anwendungsentwickler müssen nur wenige unkomplizierte Aufgaben ausgeführt werden, um dieses Entwicklungsmodell zu aktivieren:

  1. Bereitstellung einer Klasse, von der die IObservable- oder IEnumerable-Schnittstelle als Ereignisproduzent implementiert wird.

  2. Bereitstellung einer Klasse, von der die IObserver-Schnittstelle implementiert wird, oder Bereitstellung einer Klasse, von der ein IEnumerable-Objekt als Ereignis-Consumer-Objekt verarbeitet wird.

  3. Binden dieser Objekte an Abfragen.

Dieses Entwicklermodell erfordert weder großen Lern- bzw. Programmieraufwand, um die zeitbezogenen Eigenschaften der Ereignisse zu definieren, noch Kenntnis der zugrundeliegenden Zustandsübergänge des Kernadaptermodells. In folgenden Szenarien empfiehlt sich die Verwendung dieses Entwicklungsmodells:

  1. Historische Abfragen. Finanzanalystin Alice ermittelt Muster in historischen Marktdaten, indem sie zeitbezogene Abfragen für große Datensätze ausführt. In diesem Fall weist der Eingabedatenstrom ein definitives Ende auf. Nachdem das letzte Datenelement verarbeitet wurde, muss die Abfrage enden.

  2. Ad-hoc-Abfragen für Live-Quellen. Serveradministrator Bob vermutet die Verweigerung eines Denial-of-Service-Angriffs. Er ermittelt die Quelle des Angriffs durch eine iterative Serie von Ad-hoc-Abfragen für die Netzwerkdatenströme, die er überwacht.

  3. Eingebettet in benutzerdefinierten Anwendungen. Benutzeroberflächenentwickler Charlie entwickelt anhand zeitbezogener Abfragen für Windows-Ereignisse Analysemuster von Mausgesten. StreamInsight ist in die benutzerdefinierte Anwendung eingebettet.

In beiden Fällen ist die Abfrage nur vorhanden, solange von der Clientanwendung die Ergebnisse gelauscht werden.

In diesem Abschnitt

Dieser Abschnitt umfasst folgende Themen:

Überlegungen zur Programmierung für Observable- und Enumerable-Quellen und -Senken

Observable- und Enumerable-Quellen und Senken werden nur in eingebetteten Lösungen unterstützt.

Observable- oder Enumerable-Ereignisquellen und -senken werden nur im gehosteten Bereitstellungsmodell unterstützt, in dem der StreamInsight-Server in die Anwendung eingebettet ist. Observable- oder Enumerable-Ereignisquellen und -senken können nicht mit dem eigenständigen bzw. dem Remote-Serverbereitstellungsmodell verwendet werden. Weitere Informationen zu Bereitstellungsmodellen finden Sie unter StreamInsight-Serverbereitstellungsmodelle.

Von API-Funktionen werden die zeitbezogenen Anforderungen von StreamInsight unterstützt.

Die API ermöglicht vollständige Genauigkeit für das zeitbezogene Modell von StreamInsight, einschließlich des Einreihens von CTI-Ereignissen in Warteschlangen.

  • Im Fall von Observable- und Enumerable-Eingaben muss Folgendes beachtet werden:

    • Von den To[Point|Interval|Edge]Stream-Methoden werden die Eingabedaten als StreamInsight-Ereignisse zusammengefasst und die zeitbezogenen Merkmale der Quelldaten angegeben.

    • Anhand der Helfermethode und -eigenschaften für die AdvanceTimeSettings-Klasse können Entwickler die Häufigkeit angeben, mit der CTI-Ereignisse in die Warteschlange eingereiht werden, und so die Aktualität der Eingabedaten bestimmen.

  • Für Observable- und Enumerable-Ausgaben kann der Entwickler wählen, ob Zeitinformationen in der Form von Punkt- oder Intervallereignissen bzw. Edge-Ereignissen durch die To[Point|Interval|Edge]Observable- und To[Point|Interval|Edge]Enumerable-Methoden implementiert werden sollen.

Observable-Unterstützung ist von Microsoft .NET Framework 4 abhängig.

Wenn von der Anwendung Ereignisquellen oder -senken verwendet werden, von denen IObservable- oder IObserver-Schnittstellen implementiert werden, gilt Folgendes:

  • Die Anwendung muss auf die Assembly Microsoft.ComplexEventProcessing.Observable.dll verweisen.

  • Die Anwendung muss auf .NET Framework 4 (nicht das .NET Framework 4-Clientprofil) abzielen.