Suche

über alle News und Events

 

Alle News

 

Ein knackiger und kompakter Überblick auf die...

Weiterlesen

Auch am dritten Tag gab es interessante...

Weiterlesen

Die großen Ankündigungen aus dem ersten Tag...

Weiterlesen

Keynote - Stand der Integration - Jon Fancey:...

Weiterlesen

Integrieren Sie noch oder managen Sie bereits den...

Weiterlesen

Inwieweit lassen sich vorhandene BizTalk Lösungen...

Weiterlesen

Wie kann ein Prozess Monitoring einfach und...

Weiterlesen

Aufzeichnungen und Foliensätze jetzt erhältlich...

Weiterlesen

Führende Veranstaltung rund um Connectivity auf...

Weiterlesen

Stellenanzeige: Wir suchen dringend an unserem...

Weiterlesen

How-to: Mit parallelen Azure FunctionApp Instanzen Nachrichten aus dem ServiceBus in der richtigen Reihenfolge auslesen

Der Artikel zeigt auf, wie man die Stärken vom Azure ServiceBus und den Azure FunctionApps im Consumption Plan (1) nutzen kann, wenn die zu verarbeitende Nachrichten teilweise voneinander abhängen.

Dafür schauen wir uns das Szenario eines unserer Kunden an:

Mittels des Event Sourcing Patterns (2) werden verschiedene Events erzeugt und über ein Azure ServiceBus Topic (3) publiziert.
Einer dieser Event-Konsumer ist eine Azure FunctionApp im Consumption Plan, da sich die zu erwartende Last sehr ungleichmäßig über den Tag verteilt. Dank des Consumption-Plans sind die Kosten gering, wenn kaum Events auftreten. Sobald es nötig ist, erfolgt eine automatische Skalierung und wir haben die benötigte Leistung.

Problem ist nur, dass einige Events unbedingt in der richtigen Reihenfolge abgearbeitet werden müssen. Das ist jedoch nicht mehr sichergestellt, sobald die FunctionApp skaliert. Dann kann es nämlich dazu kommen, dass die Verarbeitung eines Events in einer Instanz eine Verarbeitung in einer anderen Instanz überholt, Stichwort „race condition“ (4). Um dem vorzubeugen, kann man im ServiceBus das Feature Message Sessions (5) benutzen.

Quelle: https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions

Hier für muss man bei der Erstellung einer Topic Subscription die Option „enable-session“ wie hier mittels Azure CLI (6) aktivieren, da dieses Feature nicht mehr im Nachhinein aktiviert werden kann.

az servicebus topic subscription create --name mysubscription --namespace-name mynamespace --resource-group myresourcegroup --topic-name mytopic –-enable-session

 

Zusätzlich muss im ServiceBusTrigger in der Azure FunctionApp der Session Support „IsSessionsEnabled“ aktiviert werden.

 

„[ServiceBusTrigger("%TopicName%", "%TopicSubscriptionName%", Connection = "ServiceBusConnection", IsSessionsEnabled = true)]“

 

Falls man versucht ohne „IsSessionsEnabled“ auf die Subscription zuzugreifen gibt es folgenden Fehlermeldung „Microsoft.Azure.ServiceBus: It is not possible for an entity that requires sessions to create a non-sessionful message receiver“             

 

Nun muss noch beim Senden der Nachrichten in den ServiceBus Topic die SessionId gesetzt werden, da sonst die Nachrichten in der DeadLetterQueue mit dem Fehler „Session enabled entity doesn't allow a message whose session identifier is null.“ landen.

Nun werden alle Events, die zusammengehören, mit der gleichen SessionId markiert und auch garantiert in der richtigen Reihenfolge abgearbeitet, obwohl sich parallele Azure FunctionApp Instanzen um die zügige Verarbeitung kümmern.

P.S: Azure ServiceBus Queues unterstützen ebenfalls Sessions.

Links:

  1. Azure Functions Consumption plan hosting

https://docs.microsoft.com/en-us/azure/azure-functions/consumption-plan

  1. Event Sourcing pattern
    https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing
    https://martinfowler.com/eaaDev/EventSourcing.html
  2. Service Bus queues, topics, and subscriptions
    https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions
  3. Race condition:
    https://de.wikipedia.org/wiki/Wettlaufsituation
  4. Message sessions:
    https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions
  5. Azure CLI:
    https://docs.microsoft.com/de-de/cli/azure/

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz