Ereignisse
31. März, 23 Uhr - 2. Apr., 23 Uhr
Das größte Fabric-, Power BI- und SQL-Lernereignis. 31. März – 2. April. Verwenden Sie Code FABINSIDER, um $400 zu sparen.
Heute registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
Für Azure Service Bus werden mehrere Nachrichtenbroker verwendet, um Nachrichten zu verarbeiten, sowie mehrere Nachrichtenspeicher, um Nachrichten zu speichern. Eine herkömmliche Warteschlange oder ein Thema werden von einem einzelnen Nachrichtenbroker verarbeitet und in einem Nachrichtenspeicher gespeichert. Service Bus-Partitionen ermöglichen das Partitionieren von Warteschlangen und Themen oder Nachrichtenentitäten über mehrere Nachrichtenbroker und -speicher. Eine Partitionierung bedeutet, dass der Gesamtdurchsatz einer partitionierten Entität nicht mehr durch die Leistung eines einzelnen Nachrichtenbrokers oder Nachrichtenspeichers beschränkt wird. Außerdem führt ein vorübergehender Ausfall eines Nachrichtenspeichers nicht dazu, dass eine partitionierte Warteschlange oder ein Thema nicht verfügbar ist. Partitionierte Warteschlangen und Themen können alle erweiterten Service Bus-Features enthalten, z. B. die Unterstützung von Transaktionen und Sitzungen.
Hinweis
Bei der Partitionierung gibt es einige Unterschiede zwischen den SKUs „Basic“, „Standard“ und „Premium“.
Es ist nicht möglich, die Partitionierungsoption für einen vorhandenen Namespace, eine Warteschlange oder ein Thema zu ändern. Sie können die Option nur bei der Erstellung der Entität festlegen.
Jede partitionierte Warteschlange bzw. jedes Thema besteht aus mehreren Partitionen. Jede Partition wird in einem anderen Nachrichtenspeicher gespeichert und von einem anderen Nachrichtenbroker verarbeitet. Wenn eine Nachricht an eine partitionierte Warteschlange bzw. ein partitioniertes Thema gesendet wird, weist Service Bus die Nachricht einem der Partitionen zu. Service Bus nimmt die Auswahl willkürlich oder mithilfe eines Partitionsschlüssels vor, den der Absender angeben kann.
Wenn ein Client eine Nachricht von einer partitionierten Warteschlange oder von einem Abonnement eines partitionierten Themas empfangen möchte, fragt Service Bus alle Partitionen auf Nachrichten ab. Anschließend wird die erste Nachricht zurückgegeben, die von einem der Nachrichtenspeicher an den Empfänger gesendet wird. Service Bus speichert die anderen Nachrichten zwischen und gibt sie zurück, wenn mehr Empfangsanforderungen eingehen. Ein empfangender Client ist sich der Partitionierung nicht bewusst. Das Verhalten einer partitionierten Warteschlange oder eines Themas (z. B. „read“, „complete“, „defer“, „deadletter“, „prefetching“) dem Client gegenüber ist mit dem Verhalten einer normalen Entität identisch.
Der Peekvorgang auf einer nicht partitionierten Entität gibt immer die älteste Nachricht zurück. Dies ist jedoch auf einer partitionierten Entität nicht der Fall. Stattdessen wird hier die älteste Nachricht in einer der Partitionen zurückgegeben, deren Nachrichtenbroker zuerst reagiert hat. Es gibt keine Garantie, dass es sich bei der zurückgegebenen Nachricht um die älteste auf allen Partitionen handelt.
Es fallen keine zusätzlichen Kosten an, wenn eine Nachricht an eine partitionierte Warteschlange oder ein Thema gesendet oder von dort empfangen wird.
Hinweis
Der Peekvorgang gibt die älteste Nachricht aus der Partition basierend auf ihrer Sequenznummer zurück. Bei partitionierten Entitäten wird die Sequenznummer relativ zur Partition ausgegeben. Weitere Informationen finden Sie unter Nachrichtensequenzierung und Zeitstempel.
Wenn eine Nachricht in eine partitionierte Warteschlange oder ein Thema eingereiht wird, wird von Service Bus das Vorhandensein eines Partitionsschlüssels überprüft. Wenn ein Schlüssel gefunden wird, wird die Partition basierend auf diesem Schlüssel ausgewählt. Falls kein Partitionsschlüssel gefunden wird, wird die Partition basierend auf einem internen Algorithmus ausgewählt.
Einige Szenarien, z. B. Sitzungen oder Transaktionen, erfordern es, dass Nachrichten in einer bestimmten Partition gespeichert werden. Für all diese Szenarien ist die Verwendung eines Partitionsschlüssels erforderlich. Alle Nachrichten, für die der gleiche Partitionsschlüssel verwendet wird, sind derselben Partition zugewiesen. Wenn die Partition vorübergehend nicht verfügbar ist, wird von Service Bus ein Fehler zurückgegeben.
Je nach Szenario werden verschiedene Nachrichteneigenschaften als Partitionsschlüssel verwendet:
SessionId: Wenn für eine Nachricht die Eigenschaft „Sitzungs-ID“ festgelegt ist, verwendet Service Bus sie als Partitionsschlüssel. Auf diese Weise werden alle Nachrichten, die zu derselben Sitzung gehören, von demselben Nachrichtenbroker verarbeitet. Durch Sitzungen kann Service Bus sowohl die Nachrichtensortierung als auch die Einheitlichkeit von Sitzungszuständen garantieren.
PartitionKey: Wenn für eine Nachricht die Partitionsschlüssel-Eigenschaft festgelegt ist, aber nicht die Sitzungs-ID-Eigenschaft, verwendet Service Bus den Partitionsschlüssel-Eigenschaftswert als Partitionsschlüssel. Wenn für die Nachricht sowohl die Sitzungs-ID- als auch die Partitionsschlüssel-Eigenschaft festgelegt ist, müssen beide Eigenschaften identisch sein. Falls die Partitionsschlüssel-Eigenschaft auf einen anderen Wert als die Sitzungs-ID-Eigenschaft festgelegt ist, gibt Service Bus eine Ausnahme für einen ungültigen Vorgang zurück. Die PartitionKey-Eigenschaft sollte verwendet werden, wenn ein Absender nicht sitzungsorientierte Transaktionsnachrichten sendet. Mit dem Partitionsschlüssel wird sichergestellt, dass alle Nachrichten, die innerhalb einer Transaktion gesendet werden, von demselben Nachrichtenbroker verarbeitet werden.
MessageId: Wenn die Warteschlange oder das Thema mit der Duplikaterkennungsfunktion erstellt wurde und die Eigenschaften der Sitzungs-ID oder des Partitionsschlüssels nicht festgelegt wurden, wird der Wert der Nachrichten-ID-Eigenschaft als Partitionsschlüssel verwendet. (Die Microsoft Client-Bibliotheken weisen automatisch eine Nachrichten-ID zu, wenn dies von der sendenden Anwendung nicht übernommen wird.) In diesem Fall werden alle Kopien einer Nachricht von demselben Nachrichtenbroker verarbeitet. Mit dieser ID kann Service Bus doppelte Nachrichten erkennen und verwerfen. Wenn das Feature zur Duplikaterkennung nicht aktiviert ist, betrachtet Service Bus die Nachrichten-ID-Eigenschaft nicht als Partitionsschlüssel.
Wenn kein Partitionsschlüssel vorhanden ist, verteilt Service Bus Nachrichten nach einem Roundrobinverfahren auf alle Partitionen der partitionierten Warteschlange bzw. des partitionierten Themas. Wenn die ausgewählte Partition nicht verfügbar ist, weist Service Bus die Nachricht einer anderen Partition zu. Auf diese Weise kann der Sendevorgang erfolgreich durchgeführt werden, obwohl ein Nachrichtenspeicher vorübergehend nicht verfügbar ist. Sie erzielen jedoch nicht die garantierte Reihenfolge, die ein Partitionsschlüssel liefert.
Eine ausführlichere Erläuterung des Kompromisses zwischen Verfügbarkeit (kein Partitionsschlüssel) und Konsistenz (Verwendung eines Partitionsschlüssels) finden Sie unter Verfügbarkeit und Konsistenz in Event Hubs. Mit Ausnahme der Partitions-ID, die nicht für Benutzer verfügbar gemacht wird, gelten diese Informationen gleichermaßen für partitionierte Service Bus-Entitäten.
Um Service Bus ausreichend Zeit zum Einreihen der Nachricht in eine andere Partition zu geben, muss der Timeout-Wert des Clients, der die Nachricht sendet, größer als 15 Sekunden sein. Der Standardwert von 60 Sekunden wird empfohlen.
Ein Partitionsschlüssel „heftet“ eine Nachricht an eine bestimmte Partition an. Wenn der Nachrichtenspeicher, der diese Partition enthält, nicht verfügbar ist, wird von Service Bus ein Fehler zurückgegeben. Wenn kein Partitionsschlüssel vorhanden ist, kann Service Bus eine andere Partition auswählen, damit der Vorgang erfolgreich ist. Aus diesem Grund wird empfohlen, nur dann einen Partitionsschlüssel anzugeben, wenn dies erforderlich ist.
Nachrichten, die als Teil einer Transaktion gesendet werden, müssen einen Partitionsschlüssel angeben. Beim Schlüssel kann es sich um eine der folgenden Eigenschaften handeln: Sitzungs-ID, Partitionsschlüssel oder Nachrichten-ID. Für alle Nachrichten, die als Teil derselben Transaktion gesendet werden, muss derselbe Partitionsschlüssel angegeben werden. Wenn Sie versuchen, eine Nachricht innerhalb einer Transaktion ohne Partitionsschlüssel zu senden, wird von Service Bus eine Ausnahme für einen ungültigen Vorgang zurückgegeben. Wenn Sie versuchen, mehrere Nachrichten mit verschiedenen Partitionsschlüsseln innerhalb derselben Transaktion zu senden, gibt Service Bus eine Ausnahme für einen ungültigen Vorgang zurück. Beispiel:
CommittableTransaction committableTransaction = new CommittableTransaction();
using (TransactionScope ts = new TransactionScope(committableTransaction))
{
ServiceBusMessage msg = new ServiceBusMessage("This is a message");
msg.PartitionKey = "myPartitionKey";
await sender.SendMessageAsync(msg);
ts.Complete();
}
committableTransaction.Commit();
Wenn Eigenschaften, die als Partitionsschlüssel dienen, festgelegt werden, heftet Service Bus die Nachricht an eine bestimmte Partition an. Dieses Verhalten tritt unabhängig davon auf, ob eine Transaktion verwendet wird. Es wird empfohlen, keinen Partitionsschlüssel anzugeben, wenn dies nicht erforderlich ist.
Um eine Transaktionsnachricht an ein sitzungsorientiertes Thema bzw. eine sitzungsorientierte Warteschlange zu senden, muss für die Nachricht die Sitzungs-ID-Eigenschaft festgelegt sein. Wenn die Partitionsschlüssel-Eigenschaft ebenfalls angegeben wird, muss diese mit der Sitzungs-ID-Eigenschaft identisch sein. Falls sie sich unterscheiden, gibt Service Bus eine Ausnahme für einen ungültigen Vorgang aus.
Im Gegensatz zu normalen (nicht partitionierten) Warteschlangen oder Themen ist es nicht möglich, eine einzelne Transaktion zu verwenden, um mehrere Nachrichten an verschiedene Sitzungen zu senden. Bei einem entsprechenden Versuch gibt Service Bus eine Ausnahme für einen ungültigen Vorgang aus. Beispiel:
CommittableTransaction committableTransaction = new CommittableTransaction();
using (TransactionScope ts = new TransactionScope(committableTransaction))
{
ServiceBusMessage msg = new ServiceBusMessage("This is a message");
msg.SessionId = "mySession";
await sender.SendMessageAsync(msg);
ts.Complete();
}
committableTransaction.Commit();
Service Bus unterstützt die automatische Nachrichtenweiterleitung von und zwischen partitionierten Entitäten sowie an diese. Sie können dieses Feature aktivieren, wenn Sie Warteschlangen und Abonnements erstellen oder aktualisieren. Weitere Informationen finden Sie unter Aktivieren der Nachrichtenweiterleitung. Wenn für die Nachricht ein Partitionsschlüssel (Sitzungs-ID, Partitionsschlüssel oder Nachrichten-ID) angegeben ist, wird dieser Partitionsschlüssel für die Zielentität verwendet.
Derzeit gelten bei Service Bus die folgenden Einschränkungen für partitionierte Warteschlangen und Themen:
Bei partitionierten Premium-Namespaces ist die Nachrichtengröße auf 1 MB beschränkt, wenn die Nachrichten einzeln gesendet werden, und die Batchgröße ist auf 1 MB beschränkt, wenn die Nachrichten in einem Batch gesendet werden.
Für partitionierte Warteschlangen und Themen wird das Senden von Nachrichten nicht unterstützt, die unterschiedlichen Sitzungen einer einzelnen Transaktion angehören.
Service Bus erlaubt derzeit bis zu 100 partitionierte Warteschlangen oder Themen pro Namespace für die Basic- und die Standard-SKU. Jede partitionierte Warteschlange bzw. jedes partitionierte Thema wird in das zulässige Kontingent von 10.000 Entitäten pro Namespace eingerechnet.
Sie können die Partitionierung mit dem Azure-Portal, PowerShell, der CLI, einer Resource Manager-Vorlage, .NET, Java, Python und JavaScript aktivieren. Weitere Informationen finden Sie unter Aktivieren der Partitionierung für eine Warteschlange oder ein Thema von Azure Service Bus (Basic/Standard).
Informieren Sie sich im AMQP 1.0-Protokollhandbuch über die grundlegenden Konzepte der Messagingspezifikation von AMQP (Advance Message Queueing Protocol) 1.0.
Ereignisse
31. März, 23 Uhr - 2. Apr., 23 Uhr
Das größte Fabric-, Power BI- und SQL-Lernereignis. 31. März – 2. April. Verwenden Sie Code FABINSIDER, um $400 zu sparen.
Heute registrierenSchulung
Modul
Entwerfen einer Strategie für die Datenpartitionierung - Training
Entwerfen einer Strategie für die Datenpartitionierung
Dokumentation
Azure Service Bus Premium Messaging-Stufe - Azure Service Bus
Dieser Artikel beschreibt die Tarife Standard und Premium von Azure Service Bus. Er vergleicht diese Tarife und erläutert technische Unterschiede.
Microsoft Azure Service Bus – Kontingente und Grenzwerte - Azure Service Bus
In diesem Artikel werden die grundlegenden Kontingente und Drosselungsschwellenwerte in Azure Service Bus-Messaging aufgelistet. Ein Beispiel ist die maximale Anzahl von Namespaces pro Abonnement.
Azure Service Bus-Messaging: Erweiterte Features - Azure Service Bus
Dieser Artikel bietet eine allgemeine Übersicht über erweiterte Features in Azure Service Bus wie Sitzungen, geplante Zustellung, AutoDelete im Leerlauf usw.