Azure-ServicebusAzure Service Bus

Ob eine Anwendung oder ein Dienst in einer Cloud betrieben wird oder lokal installiert ist – sie bzw. er muss oft mit anderen Anwendungen oder Diensten interagieren.Whether an application or service runs in the cloud or on premises, it often needs to interact with other applications or services. Microsoft Azure stellt Service Bus als umfangreich einsetzbare Lösung bereit.To provide a broadly useful way to do this, Microsoft Azure offers Service Bus. Der vorliegende Artikel bietet einen Überblick über diese Technologie und beschreibt, wann Sie den Einsatz von Service Bus in Erwägung ziehen sollten.This article looks at this technology, describing what it is and why you might want to use it.

Service Bus – GrundlagenService Bus fundamentals

Verschiedene Situationen erfordern verschiedene Kommunikationsarten.Different situations call for different styles of communication. Manchmal ist die beste Lösung, Anwendungen Nachrichten über einfache Warteschlangen senden und empfangen zu lassen.Sometimes, letting applications send and receive messages through a simple queue is the best solution. In anderen Situationen ist eine normale Warteschlange nicht genug, sondern eine Warteschlange mit einem Veröffentlichungs- und Abonnementsmechanismus ist besser geeignet.In other situations, an ordinary queue isn't enough; a queue with a publish-and-subscribe mechanism is better. In manchen Fällen ist nur eine Verbindung zwischen den Anwendungen erforderlich. Warteschlangen werden nicht benötigt.In some cases, all that's needed is a connection between applications, and queues are not required. Azure Service Bus bietet alle drei Optionen, sodass Ihre Anwendungen auf mehrere verschiedene Arten miteinander interagieren können.Azure Service Bus provides all three options, enabling your applications to interact in several different ways.

Service Bus ist ein Clouddienst mit mehreren Mandanten. Das bedeutet, dass der Dienst von mehreren Benutzern gemeinsam genutzt wird.Service Bus is a multi-tenant cloud service, which means that the service is shared by multiple users. Jeder Benutzer, z.B. ein Anwendungsentwickler, erstellt einen Namespace und definiert dann die erforderlichen Kommunikationsmechanismen innerhalb dieses Namespace.Each user, such as an application developer, creates a namespace, then defines the communication mechanisms needed within that namespace. Abbildung 1 zeigt diese Architektur:Figure 1 shows this architecture:

Abbildung 1: Service Bus stellt einen mehrinstanzenfähigen Dienst zum Verbinden von Anwendungen über die Cloud bereit.Figure 1: Service Bus provides a multi-tenant service for connecting applications through the cloud.

Innerhalb eines Namespace können Sie eine oder mehr Instanzen von drei verschiedenen Kommunikationsmechanismen verwenden, von denen jeder die Anwendungen auf andere Weise verbindet.Within a namespace, you can use one or more instances of three different communication mechanisms, each of which connects applications in a different way. Die Auswahlmöglichkeiten sind:The choices are:

  • Warteschlangenfür eine unidirektionale Kommunikation.Queues, which allow one-directional communication. Jede Warteschlange agiert als Zwischenstufe (manchmal auch Brokergenannt), die gesendete Nachrichten speichert, bis diese empfangen werden.Each queue acts as an intermediary (sometimes called a broker) that stores sent messages until they are received. Jede Nachricht wird von einem einzelnen Empfänger empfangen.Each message is received by a single recipient.
  • Themen für eine unidirektionale Kommunikation über Abonnements.Topics, which provide one-directional communication using subscriptions. Ein einzelnes Thema kann über mehrere Abonnements verfügen.A single topic can have multiple subscriptions. Wie bei einer Warteschlange agiert ein Thema als Broker, aber jedes Abonnement kann optional Filter verwenden, um nur Nachrichten zu empfangen, die bestimmte Kriterien erfüllen.Like a queue, a topic acts as a broker, but each subscription can optionally use a filter to receive only messages that match specific criteria.
  • Relaysfür eine bidirektionale Kommunikation.Relays, which provide bi-directional communication. Im Gegensatz zu Warteschlangen und Themen speichert ein Relay keine gesendeten Nachrichten – es ist kein Broker.Unlike queues and topics, a relay doesn't store in-flight messages; it's not a broker. Stattdessen leitet es sie an eine Zielanwendung weiter.Instead, it just passes them on to the destination application.

Wenn Sie eine Warteschlange, ein Thema oder ein Relais erstellen, geben Sie diesem Objekt einen Namen.When you create a queue, topic, or relay, you give it a name. In Kombination mit der Bezeichnung Ihres Namespace ist dieser Name ein eindeutiger Bezeichner für das Objekt.Combined with whatever you called your namespace, this name creates a unique identifier for the object. Anwendungen können diesen Namen an Service Bus übermitteln und dann mithilfe der Warteschlange, des Themas oder des Relays miteinander kommunizieren.Applications can provide this name to Service Bus, then use that queue, topic, or relay to communicate with each other.

Für die Verwendung eines dieser Objekte im Relayszenario können Windows-Anwendungen Windows Communication Foundation (WCF) nutzen.To use any of these objects in the relay scenario, Windows applications can use Windows Communication Foundation (WCF). Dieser Dienst wird als WCF Relay bezeichnet.This service is known as WCF Relay. Für Warteschlangen und Themen können Windows-Anwendungen eine über Service Bus definierte Messaging-API verwenden.For queues and topics, Windows applications can use Service Bus-defined messaging APIs. Damit diese Objekte von Nicht-Windows-Anwendungen einfacher verwendet werden können, stellt Microsoft SDKs für Java, Node.js und andere Sprachen bereit.To make these objects easier to use from non-Windows applications, Microsoft provides SDKs for Java, Node.js, and other languages. Sie können auch mithilfe von REST-APIs über HTTP(s) auf Warteschlangen und Themen zugreifen.You can also access queues and topics using REST APIs over HTTP(s).

Wichtig: Service Bus selbst wird zwar in der Cloud (sprich: in den Microsoft Azure-Datencentern) ausgeführt, die Anwendungen, die Service Bus verwenden, können jedoch an einem beliebigen Ort ausgeführt werden.It's important to understand that even though Service Bus itself runs in the cloud (that is, in Microsoft Azure datacenters), applications that use it can run anywhere. Sie können Service Bus zum Verbinden von Anwendungen auf Azure oder innerhalb Ihres eigenen Datencenters verwenden.You can use Service Bus to connect applications running on Azure, for example, or applications running inside your own datacenter. Außerdem können Sie damit eine Anwendung, die unter Azure oder auf einer anderen Cloud-Plattform ausgeführt wird, mit einer lokalen Anwendung oder mit Tablets oder Smartphones verbinden.You can also use it to connect an application running on Azure or another cloud platform, to an on-premises application or with tablets and phones. Service Bus ist ein Kommunikationsmechanismus in der Cloud, auf den praktisch von überall aus zugegriffen werden kann.Service Bus is a communication mechanism in the cloud that's accessible from pretty much anywhere. Wie Sie es verwenden, hängt davon ab, was Ihre Anwendungen leisten müssen.How you use it depends on what your applications need to do.

WarteschlangenQueues

Angenommen, Sie entscheiden sich dafür, zwei Anwendungen über eine Service Bus-Warteschlange miteinander zu verbinden.Suppose you decide to connect two applications using a Service Bus queue. Abbildung 2 veranschaulicht diese Situation:Figure 2 illustrates this situation:

Abbildung 2: Service Bus-Warteschlangen bieten eine asynchrone unidirektionale Kommunikation.Figure 2: Service Bus queues provide one-way asynchronous queuing.

Ein Sender sendet eine Nachricht an eine Service Bus-Warteschlange, und ein Empfänger nutzt diese Nachricht zu einem späteren Zeitpunkt.A sender sends a message to a Service Bus queue, and a receiver consumes that message at some later time. Eine Warteschlange kann einen einzelnen Empfänger besitzen, wie in Abbildung 2 dargestellt.A queue can have just a single receiver, as Figure 2 shows. Alternativ können auch mehrere Anwendungen aus der gleichen Warteschlange lesen.Or, multiple applications can read from the same queue. Im zweiten Fall wird jede Nachricht nur von einem einzelnen Empfänger gelesen.In the latter situation, each message is read by just one receiver. Bei einem Multicastdienst empfiehlt sich stattdessen die Verwendung eines Themas.For a multi-cast service, you should use a topic instead.

Jede Nachricht besteht aus zwei Teilen: einem Satz von Eigenschaften (Schlüssel-Wert-Paar) und einer Nachrichtennutzlast.Each message has two parts: a set of properties, a key/value pair, and a message payload. Die Nutzlast kann binärer Art, Text oder sogar XML sein.The payload can be binary, text, or even XML. Die Art der Verwendung richtet sich danach, welche Aufgaben in der Anwendung ausgeführt werden sollen.How they're used depends on what an application is trying to do. Wenn eine Anwendung z.B. eine Nachricht über einen kürzlich erfolgten Verkauf sendet, kann die Nachricht die Eigenschaften Verkäufer=„Ava“ und Menge=10000 enthalten.For example, an application sending a message about a recent sale might include the properties Seller="Ava" and Amount=10000. Der Nachrichtentext kann ein gescanntes Bild des unterzeichneten Verkaufsvertrags enthalten oder auch leer sein.The message body might contain a scanned image of the sale's signed contract or, if there isn't one, remain empty.

Ein Empfänger kann eine Nachricht von einem Servicebus auf zwei verschiedene Arten lesen.A receiver can read a message from a Service Bus queue in two different ways. Bei Verwendung der ersten Option (ReceiveAndDelete) wird eine Nachricht aus der Warteschlange empfangen und sofort gelöscht.The first option, called ReceiveAndDelete, receives a message from the queue and immediately deletes it. Diese Option ist unkompliziert, aber wenn der Empfänger ausfällt, bevor die Verarbeitung der Nachricht abgeschlossen ist, geht die Nachricht verloren.This option is simple, but if the receiver crashes before it finishes processing the message, the message is lost. Da die Nachricht dann aus der Warteschlange entfernt worden ist, kann kein anderer Empfänger auf sie zugreifen.Because it's been removed from the queue, no other receiver can access it.

Die zweite Option, PeekLock, dient zur Lösung dieses Problems.The second option, PeekLock, is meant to help with this problem. Wie bei ReceiveAndDelete wird auch bei PeekLock eine gelesene Nachricht aus der Warteschlange entfernt.Like ReceiveAndDelete, a PeekLock read removes a message from the queue. Die Nachricht wird allerdings nicht gelöscht, sondern gesperrt und für andere Empfänger unsichtbar gemacht.It doesn't delete the message, however. Anschließend wird auf eines von drei Ereignissen gewartet.Instead, it locks the message, making it invisible to other receivers, then waits for one of three events:

  • Wenn der Empfänger die Nachricht erfolgreich verarbeitet, wird die Meldung Complete() ausgegeben, und die Warteschlange löscht die Nachricht.If the receiver processes the message successfully, it calls Complete(), and the queue deletes the message.
  • Wenn der Empfänger entscheidet, dass er die Nachricht nicht erfolgreich verarbeiten kann, wird die Meldung Abandon() ausgegeben.If the receiver decides that it can't process the message successfully, it calls Abandon(). In diesem Falle hebt die Warteschlange die Sperrung der Nachricht auf und macht sie für andere Empfänger verfügbar.The queue then removes the lock from the message and makes it available to other receivers.
  • Wenn der Empfänger innerhalb eines konfigurierbaren Zeitraums (standardmäßig 60 Sekunden) keine der beiden Meldungen aufruft, nimmt die Warteschlange an, dass der Empfänger ausgefallen ist.If the receiver calls neither of these methods within a configurable period of time (by default, 60 seconds), the queue assumes the receiver has failed. In diesem Fall verhält sie sich so, als hätte der Empfänger Abandonaufgerufen, sodass die Nachricht für andere Empfänger verfügbar wird.In this case, it behaves as if the receiver had called Abandon, making the message available to other receivers.

Beachten Sie, was in diesem Fall geschehen kann: Die gleiche Nachricht kann zweimal zugestellt werden – möglicherweise sogar an zwei verschiedene Empfänger.Note what can happen here: the same message might be delivered twice, perhaps to two different receivers. Anwendungen, die Service Bus-Warteschlangen verwenden, müssen darauf vorbereitet sein.Applications using Service Bus queues must be prepared for this event. Um die Erkennung von Duplikaten zu erleichtern, verfügt jede Nachricht über die eindeutige Eigenschaft MessageID , die standardmäßig gleich bleibt – unabhängig davon, wie oft die Nachricht aus einer Warteschlange gelesen wird.To make duplicate detection easier, each message has a unique MessageID property that by default stays the same no matter how many times the message is read from a queue.

Warteschlangen sind in einigen Situationen sinnvoll.Queues are useful in quite a few situations. Sie ermöglichen die Kommunikation zwischen Anwendungen auch dann, wenn beide Apps zur selben Zeit ausgeführt werden, was insbesondere bei Batch- und Mobilanwendungen sehr praktisch sein kann.They enable applications to communicate even if both apps are not running at the same time, something that's especially handy with batch and mobile applications. Eine Warteschlange mit mehreren Empfängern bietet auch automatischen Lastenausgleich, da gesendete Nachrichten zwischen diesen Empfängern verteilt werden.A queue with multiple receivers also provides automatic load balancing, since sent messages are spread across these receivers.

ThemenTopics

So hilfreich sie generell auch sind – Warteschlangen sind nicht immer die beste Lösung.Useful as they are, queues aren't always the right solution. Manchmal sind Themen vorzuziehen.Sometimes, topics are better. Dieses Konzept wird in Abbildung 3 veranschaulicht:Figure 3 illustrates this idea:

Abbildung 3: Auf Grundlage des in einer Abonnementanwendung definierten Filters kann diese einige oder alle Nachrichten empfangen, die an ein Service Bus-Thema gesendet wurden.Figure 3: Based on the filter a subscribing application specifies, it can receive some or all the messages sent to a Service Bus topic.

Ein Thema ähnelt in vielen Punkten einer Warteschlange.A topic is similar in many ways to a queue. Sender schicken Nachrichten an ein Thema auf dieselbe Weise, auf die sie Nachrichten an eine Warteschlange schicken, und diese Nachrichten sehen genauso aus wie bei den Warteschlangen.Senders submit messages to a topic in the same way that they submit messages to a queue, and those messages look the same as with queues. Der Unterschied liegt darin, dass bei Themen jede empfangende Anwendung ihr eigenes Abonnement erstellen und optional einen Filter definieren kann.The difference is that topics enable each receiving application to create its own subscription and optionally define a filter. Ein Abonnent erhält eine Kopie jeder Nachricht im Thema. Die Verwendung eines Filters sorgt jedoch dafür, dass er nur die Nachrichten erhält, die dem Filter entsprechen.A subscriber receives a copy of each message in the topic, but by using a filter, can then receive only the messages that match that filter. Abbildung 3 zeigt z. B. einen Sender und ein Thema mit drei Abonnenten, jeder mit seinem eigenen Filter:For example, Figure 3 shows a sender and a topic with three subscribers, each with its own filter:

  • Abonnent 1 empfängt nur Nachrichten, die die Eigenschaft Verkäufer="Ava" haben.Subscriber 1 receives only messages that contain the property Seller="Ava".
  • Abonnent 2 empfängt Nachrichten, die die Eigenschaft Verkäufer=„Ruby“ und/oder eine Eigenschaft namens Menge haben, deren Wert größer ist als 100.000.Subscriber 2 receives messages that contain the property Seller="Ruby" and/or contain an Amount property whose value is greater than 100,000. Ruby könnte die Vertriebschefin sein, die sowohl ihre eigenen Verkäufe als auch diejenigen anderer Verkäufer ab einer bestimmten Menge sehen möchte.Perhaps Ruby is the sales manager, so she wants to see both her own sales and all large sales regardless of who makes them.
  • Abonnent 3 hat seinen Filter auf True gesetzt, was bedeutet, dass er alle Nachrichten empfängt.Subscriber 3 has set its filter to True, which means that it receives all messages. Diese Anwendung kann beispielsweise für die Pflege eines Überwachungspfads zuständig sein. Daher müssen für sie alle Nachrichten sichtbar sein.For example, this application might be responsible for maintaining an audit trail; therefore it needs to see all the messages.

Wie bei Warteschlangen können Abonnenten eines Themas Nachrichten entweder über ReceiveAndDelete oder über PeekLock lesen.As with queues, subscribers to a topic can read messages using either ReceiveAndDelete or PeekLock. Anders als bei Warteschlangen kann jedoch eine einzelne an ein Thema gesendete Nachricht von mehreren Abonnements empfangen werden.Unlike queues, however, a single message sent to a topic can be received by multiple subscriptions. Dieser Ansatz, der allgemein als Veröffentlichen und Abonnieren (oder Pub/Sub) bezeichnet wird, ist sinnvoll, wenn mehrere Anwendungen an den gleichen Nachrichten interessiert sind.This approach, commonly called publish and subscribe (or pub/sub), is useful whenever multiple applications are interested in the same messages. Durch Definition eines passenden Filters kann jeder Abonnent genau den Teil aus der Nachricht herausziehen, den er mitbekommen muss.By defining the right filter, each subscriber can tap into just the part of the message stream that it needs to see.

RelaysRelays

Sowohl Warteschlangen als auch Themen ermöglichen eine asynchrone unidirektionale Kommunikation über einen Broker.Both queues and topics provide one-way asynchronous communication through a broker. Der Verkehr fließt in nur eine Richtung, und es besteht keine direkte Verbindung zwischen Sendern und Empfängern.Traffic flows in just one direction, and there's no direct connection between senders and receivers. Aber was tun, wenn Sie diese Verbindung nicht möchten?But what if you don't want this connection? Angenommen, Ihre Anwendungen sollen Nachrichten sowohl senden als auch empfangen, oder sie möchten vielleicht eine direkte Verbindung zwischen ihnen herstellen, ohne einen Broker zum Speichern der Nachrichten zu verwenden.Suppose your applications need to both send and receive messages, or perhaps you want a direct link between them and you don't need a broker to store messages. Für solche Szenarien stellt Service Bus Relays bereit, wie in Abbildung 4 gezeigt:To address scenarios such as this, Service Bus provides relays, as Figure 4 shows:

Abbildung 4: Service Bus Relay ermöglicht eine synchrone bidirektionale Kommunikation zwischen Anwendungen.Figure 4: Service Bus Relay provides synchronous, two-way communication between applications.

Die naheliegende Frage lautet: Welchen Grund gibt es für den Einsatz eines Relays?The obvious question to ask about relays is this: why would I use one? Selbst wenn ich keine Warteschlangen benötige, wieso sollten Anwendungen über einen Clouddienst kommunizieren und nicht direkt miteinander interagieren?Even if I don't need queues, why make applications communicate via a cloud service rather than just interact directly? Die Antwort ist, dass eine direkte Kommunikation schwieriger sein kann, als Sie denken.The answer is that talking directly can be harder than you might think.

Nehmen wir an, Sie möchten zwei lokale Anwendungen miteinander verbinden, die beide in Datencentern Ihres Unternehmens laufen.Suppose you want to connect two on-premises applications, both running inside corporate datacenters. Jede dieser Anwendungen befindet sich hinter einer Firewall, und wahrscheinlich nutzt jedes Rechenzentrum eine Netzwerkadressübersetzung (NAT).Each of these applications sits behind a firewall, and each datacenter probably uses network address translation (NAT). Die Firewall blockiert alle eingehenden Nachrichten an fast allen Ports, und NAT bedeutet, dass der Computer, auf dem die jeweilige Anwendung ausgeführt wird, keine feste IP-Adresse hat, auf die Sie von außerhalb des Datencenters direkt zugreifen können.The firewall blocks incoming data on all but a few ports, and NAT implies that the computer on which each application is running doesn't have a fixed IP address that you can reach directly from outside the datacenter. Ohne zusätzliche Hilfe ist die Verbindung dieser Anwendungen über das öffentliche Internet problematisch.Without some extra help, connecting these applications over the public internet is problematic.

Ein Service Bus Relay kann diese Hilfestellung leisten.A Service Bus relay can help. Zur bidirektionalen Kommunikation über ein Relay baut jede Anwendung eine ausgehende TCP-Verbindung mit Service Bus auf und hält diese offen.To communicate bi-directionally through a relay, each application establishes an outbound TCP connection with Service Bus, then keeps it open. Jede Kommunikation zwischen den beiden Anwendungen läuft über diese beiden Verbindungen.All communication between the two applications travels over these connections. Da jede Verbindung innerhalb des Rechenzentrums hergestellt wurde, erlaubt die Firewall, dass eingehender Datenverkehr an jede Anwendung gesendet wird, ohne dass neue Ports geöffnet werden müssen.Because each connection was established from inside the datacenter, the firewall allows incoming traffic to each application without opening new ports. Dieser Ansatz löst auch das NAT-Problem, da jede Anwendung während der gesamten Kommunikation einen konstanten Endpunkt in der Cloud aufweist.This approach also gets around the NAT problem, because each application has a consistent endpoint in the cloud throughout the communication. Durch den Datenaustausch über das Relay können die Anwendungen die Probleme vermeiden, die die Kommunikation erschweren können.By exchanging data through the relay, the applications can avoid the problems that would otherwise make communication difficult.

Um Service Bus Relay verwenden zu können, nutzen die Anwendungen Windows Communication Foundation (WCF).To use Service Bus relays, applications rely on the Windows Communication Foundation (WCF). Service Bus bietet WCF-Anbindungen, die den Windows-Anwendungen die Interaktion über Relays erleichtern.Service Bus provides WCF bindings that make it straightforward for Windows applications to interact via relays. Anwendungen, die WCF bereits verwenden, geben normalerweise eine dieser Anbindungen an und kommunizieren dann miteinander über ein Relay.Applications that already use WCF can typically specify one of these bindings, then talk to each other through a relay. Anders als bei Warteschlangen und Themen erfordert die Verwendung von Relays mit Windows-fremden Anwendungen einigen Programmieraufwand (sofern sie überhaupt möglich ist), da hierfür keine Standardbibliotheken zur Verfügung stehen.Unlike queues and topics, however, using relays from non-Windows applications, while possible, requires some programming effort; no standard libraries are provided.

Im Gegensatz zu Warteschlangen und Themen werden Relays nicht explizit durch Anwendungen erstellt.Unlike queues and topics, applications don't explicitly create relays. Wenn eine Anwendung zum Empfangen von Nachrichten eine TCP-Verbindung mit Service Bus aufbaut, wird ein Relay automatisch erstellt.Instead, when an application that wishes to receive messages establishes a TCP connection with Service Bus, a relay is created automatically. Wenn die Verbindung ausfällt, wird das Relay gelöscht.When the connection is dropped, the relay is deleted. Damit eine Anwendung ein von einem bestimmten Listener erzeugtes Relay finden kann, bietet Service Bus eine Registry, die es Anwendungen erlaubt, ein bestimmtes Relay anhand seines Namens zu finden.To enable an application to find the relay created by a specific listener, Service Bus provides a registry that enables applications to locate a specific relay by name.

Relays sind die richtige Lösung, wenn direkte Kommunikation zwischen Anwendungen erforderlich ist.Relays are the right solution when you need direct communication between applications. Denken Sie z. B. an ein Fluglinien-Reservierungssystem, das in einem lokalen Rechenzentrum läuft und auf das von Eincheck-Terminals, Mobilgeräten und anderen Computern zugegriffen wird.For example, consider an airline reservation system running in an on-premises datacenter that must be accessed from check-in kiosks, mobile devices, and other computers. Anwendungen, die auf allen diesen Systemen ausgeführt werden, könnten auf Service Bus Relay in der Cloud vertrauen, um immer dann zu kommunizieren, wenn sie gerade ausgeführt werden.Applications running on all these systems could rely on Service Bus relays in the cloud to communicate, wherever they might be running.

ZusammenfassungSummary

Das Verbinden von Anwendungen zählte schon immer zur Erstellung von Komplettlösungen. Die Palette von Szenarien, in denen Anwendungen und Dienste miteinander kommunizieren müssen, nimmt stetig zu, da Anwendungen und Geräte in zunehmendem Maße mit dem Internet verbunden sind.Connecting applications has always been part of building complete solutions, and the range of scenarios that require applications and services to communicate with each other is set to increase as more applications and devices are connected to the internet. Service Bus stellt cloudbasierte Technologien bereit, um diese Kommunikation über Warteschlangen, Themen und Relays zu bewältigen und damit diese wesentliche Funktion leichter und breiter verfügbar zu machen.By providing cloud-based technologies for achieving communication through queues, topics, and relays, Service Bus aims to make this essential function easier to implement and more broadly available.

Nächste SchritteNext steps

Nachdem Sie nun mit den Grundlagen von Azure Service Bus vertraut sind, finden Sie unter den folgenden Links weitere Informationen.Now that you've learned the fundamentals of Azure Service Bus, follow these links to learn more.