Suche

über alle News und Events

 

Alle News

 

Am 01. Oktober ab 12:30 Uhr treffen sich...

Weiterlesen

Die Nutzung des Postman Mock Servers ist einfach...

Weiterlesen

Ein Community-Held feiert seinen Erfolg: „WOW! Ich...

Weiterlesen

Einfach großartig! Die Stimmung war hervorragend....

Weiterlesen

Rules, Rules, RULES!! Dan Toomey, The evolution of...

Weiterlesen

Keynote von Slava Koltovich, Feature: E2E - AIS...

Weiterlesen

Inspirierende Messeerfahrungen auf der 'Zukunft...

Weiterlesen

In diesem Artikel wird beschrieben, wie ihr eure...

Weiterlesen

Messaging mit dem Service Bus ermöglicht die...

Weiterlesen

Sebastian Meyer, Microsoft & SAP...

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