Azure WebJobs Service Bus-Clientbibliothek für .NET – Version 5.13.3
Diese Erweiterung bietet Funktionen für den Zugriff auf Azure Service Bus über eine Azure-Funktion.
Erste Schritte
Installieren des Pakets
Installieren Sie die Service Bus-Erweiterung mit NuGet:
dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus
Voraussetzungen
Azure-Abonnement: Für die Verwendung von Azure-Diensten, einschließlich Azure Service Bus, benötigen Sie ein Abonnement. Wenn Sie nicht über ein vorhandenes Azure-Konto verfügen, können Sie sich für eine kostenlose Testversion registrieren oder ihre Visual Studio-Abonnementvorteile beim Erstellen eines Kontos nutzen.
Service Bus-Namespace: Um mit Azure Service Bus zu interagieren, müssen Sie auch einen Namespace zur Verfügung haben. Wenn Sie mit dem Erstellen von Azure-Ressourcen nicht vertraut sind, sollten Sie die schrittweise Anleitung zum Erstellen eines Service Bus-Namespaces mithilfe des Azure-Portal befolgen. Dort finden Sie auch ausführliche Anweisungen zur Verwendung der Azure CLI-, Azure PowerShell- oder Arm-Vorlagen (Azure Resource Manager) zum Erstellen einer Service Bus-Entität.
Um schnell die erforderlichen Service Bus-Ressourcen in Azure zu erstellen und eine Verbindungszeichenfolge für sie zu erhalten, können Sie unsere Beispielvorlage bereitstellen, indem Sie auf klicken:
Authentifizieren des Clients
Damit die Service Bus-Clientbibliothek mit einer Warteschlange oder einem Thema interagieren kann, muss sie verstehen, wie eine Verbindung hergestellt und autorisiert werden kann. Die einfachste Möglichkeit hierfür ist die Verwendung einer Verbindungszeichenfolge, die beim Erstellen eines Service Bus-Namespaces automatisch erstellt wird. Wenn Sie mit Shared Access-Richtlinien in Azure nicht vertraut sind, sollten Sie die schrittweise Anleitung befolgen, um eine Service Bus-Verbindungszeichenfolge zu erhalten.
Die Connection
-Eigenschaft von ServiceBusAttribute
und ServiceBusTriggerAttribute
wird verwendet, um die Konfigurationseigenschaft anzugeben, in der die Verbindungszeichenfolge gespeichert wird. Wenn nicht angegeben, wird erwartet, dass die -Eigenschaft AzureWebJobsServiceBus
den Verbindungszeichenfolge enthält.
Verwenden Sie für die lokale Entwicklung die local.settings.json
Datei, um die Verbindungszeichenfolge zu speichern:
{
"Values": {
"<connection_name>": "Endpoint=sb://<service_bus_namespace>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<access key>"
}
}
Verwenden Sie bei der Bereitstellung die Anwendungseinstellungen, um die Verbindungszeichenfolge festzulegen.
Identitätsbasierte Authentifizierung
Wenn Für Ihre Umgebung eine verwaltete Identität aktiviert ist, können Sie sie verwenden, um die Service Bus-Erweiterung zu authentifizieren. Zuvor müssen Sie sicherstellen, dass Berechtigungen wie im Azure Functions Entwicklerhandbuch beschrieben konfiguriert wurden.
Um die identitätsbasierte Authentifizierung zu verwenden, geben Sie die <connection_name>__fullyQualifiedNamespace
Konfigurationseinstellung an.
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"<connection_name>__fullyQualifiedNamespace": "<service_bus_namespace>.servicebus.windows.net"
}
}
Oder legen Sie im Fall der bereitgestellten App die gleiche Einstellung in den Anwendungseinstellungen fest:
<connection_name>__fullyQualifiedNamespace=<service_bus_namespace>.servicebus.windows.net
Weitere Informationen zum Konfigurieren einer identitätsbasierten Verbindung finden Sie hier.
Wichtige Begriffe
Service Bus-Trigger
Der Service Bus-Trigger ermöglicht die Ausführung einer Funktion, wenn eine Nachricht an eine Service Bus-Warteschlange oder ein Service Bus-Thema gesendet wird.
Folgen Sie dem Tutorial Azure Service Bus Trigger, um mehr über Service Bus-Trigger zu erfahren.
Service Bus-Ausgabebindung
Die Service Bus-Ausgabebindung ermöglicht es einer Funktion, Service Bus-Nachrichten zu senden.
Folgen Sie der Azure Service Bus Ausgabebindung, um mehr über Service Bus-Bindungen zu erfahren.
Beispiele
Senden einzelner Nachrichten
Sie können einzelne Nachrichten an eine Warteschlange oder ein Thema senden, indem Sie das ServiceBus
Attribut auf den Funktionsrückgabewert anwenden. Der Rückgabewert kann vom Typ string
, byte[]
oder ServiceBusMessage
sein.
[FunctionName("BindingToReturnValue")]
[return: ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")]
public static string BindToReturnValue([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer)
{
// This value would get stored in Service Bus message body.
// The string would be UTF8 encoded.
return $"C# Timer trigger function executed at: {DateTime.Now}";
}
Sie können auch einen out
Parameter vom Typ string
, byte[]
oder ServiceBusMessage
verwenden.
[FunctionName("BindingToOutputParameter")]
public static void Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")] out ServiceBusMessage message)
{
message = new ServiceBusMessage($"C# Timer trigger function executed at: {DateTime.Now}");
}
Senden mehrerer Nachrichten
Um mehrere Nachrichten von einem einzelnen Azure-Funktionsaufruf zu senden, können Sie das ServiceBus
-Attribut auf den - oder IAsyncCollector<ServiceBusReceivedMessage>
-IAsyncCollector<string>
Parameter anwenden.
[FunctionName("BindingToCollector")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")] IAsyncCollector<ServiceBusMessage> collector)
{
// IAsyncCollector allows sending multiple messages in a single function invocation
await collector.AddAsync(new ServiceBusMessage(new BinaryData($"Message 1 added at: {DateTime.Now}")));
await collector.AddAsync(new ServiceBusMessage(new BinaryData($"Message 2 added at: {DateTime.Now}")));
}
Verwenden der Bindung an stark typisierte Modelle
Um stark typisierte Modellklassen mit der ServiceBus-Bindung zu verwenden, wenden Sie das ServiceBus
Attribut auf den Modellparameter an. Dadurch wird versucht, die ServiceBusMessage.Body
in das stark typisierte Modell deserialisieren.
[FunctionName("TriggerSingleModel")]
public static void Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")] Dog dog,
ILogger logger)
{
logger.LogInformation($"Who's a good dog? {dog.Name} is!");
}
Senden mehrerer Nachrichten mithilfe von ServiceBusSender
Sie können auch direkt an das ServiceBusSender
binden, um die meiste Kontrolle über das Senden von Nachrichten zu haben.
[FunctionName("BindingToSender")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")] ServiceBusSender sender)
{
await sender.SendMessagesAsync(new[]
{
new ServiceBusMessage(new BinaryData($"Message 1 added at: {DateTime.Now}")),
new ServiceBusMessage(new BinaryData($"Message 2 added at: {DateTime.Now}"))
});
}
Trigger pro Nachricht
Wenn Sie eine Funktion jedes Mal ausführen möchten, wenn eine Nachricht an eine Service Bus-Warteschlange oder ein Service Bus-Abonnement gesendet wird, wenden Sie das ServiceBusTrigger
Attribut auf einen , byte[]
- oder ServiceBusReceivedMessage
-Parameter anstring
.
[FunctionName("TriggerSingle")]
public static void Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")] string messageBodyAsString,
ILogger logger)
{
logger.LogInformation($"C# function triggered to process a message: {messageBodyAsString}");
}
Batchtrigger
Um eine Funktion für einen Batch empfangener Nachrichten auszuführen, wenden Sie das ServiceBusTrigger
Attribut auf einen string[]
- oder ServiceBusReceivedMessage[]
-Parameter an.
[FunctionName("TriggerBatch")]
public static void Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")] ServiceBusReceivedMessage[] messages,
ILogger logger)
{
foreach (ServiceBusReceivedMessage message in messages)
{
logger.LogInformation($"C# function triggered to process a message: {message.Body}");
logger.LogInformation($"EnqueuedTime={message.EnqueuedTime}");
}
}
Nachrichtenabrechnung
Sie können Nachrichten so konfigurieren, dass sie automatisch abgeschlossen werden, nachdem Ihre Funktion ausgeführt wurde, indem Sie verwenden ServiceBusOptions
. Wenn Sie mehr Kontrolle über die Nachrichtenabwicklung haben möchten, können Sie sowohl mit pro Nachricht als auch mit Batchtriggern an die MessageActions
binden.
[FunctionName("BindingToMessageActions")]
public static async Task Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")]
ServiceBusReceivedMessage[] messages,
ServiceBusMessageActions messageActions)
{
foreach (ServiceBusReceivedMessage message in messages)
{
if (message.MessageId == "1")
{
await messageActions.DeadLetterMessageAsync(message);
}
else
{
await messageActions.CompleteMessageAsync(message);
}
}
}
Sitzungstrigger
Um Nachrichten von einer sitzungsfähigen Warteschlange oder einem Thema zu empfangen, können Sie die IsSessionsEnabled
-Eigenschaft für das ServiceBusTrigger
Attribut festlegen. Wenn Sie mit Sitzungen arbeiten, können Sie an das SessionMessageActions
binden, um zusätzlich zur sitzungsspezifischen Funktionalität Zugriff auf die Methoden zur Nachrichtenabrechnung zu erhalten.
[FunctionName("BindingToSessionMessageActions")]
public static async Task Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>", IsSessionsEnabled = true)]
ServiceBusReceivedMessage[] messages,
ServiceBusSessionMessageActions sessionActions)
{
foreach (ServiceBusReceivedMessage message in messages)
{
if (message.MessageId == "1")
{
await sessionActions.DeadLetterMessageAsync(message);
}
else
{
await sessionActions.CompleteMessageAsync(message);
}
}
// We can also perform session-specific operations using the actions, such as setting state that is specific to this session.
await sessionActions.SetSessionStateAsync(new BinaryData("<session state>"));
}
Bindung an ReceiveActions
Es ist möglich, zusätzliche Nachrichten aus ihrem Funktionsaufruf zu empfangen. Dies kann nützlich sein, wenn Sie mehr Kontrolle darüber benötigen, wie viele Nachrichten innerhalb eines Funktionsaufrufs verarbeitet werden sollen, basierend auf einigen Merkmalen der anfänglichen Nachricht, die über den Bindungsparameter an Ihre Funktion übermittelt wurde. Alle zusätzlichen Nachrichten, die Sie erhalten, unterliegen der gleichen AutoCompleteMessages
Konfiguration wie MaxAutoLockRenewalDuration
die anfängliche Nachricht, die an Ihre Funktion übermittelt wird. Es ist auch möglich, Nachrichten anzuzeigen. Angezeigte Nachrichten unterliegen nicht der AutoCompleteMessages
Konfiguration und MaxAutoLockRenewalDuration
, da diese Nachrichten nicht gesperrt sind und daher nicht abgeschlossen werden können.
[FunctionName("BindingToReceiveActions")]
public static async Task Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>", IsSessionsEnabled = true)]
ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions,
ServiceBusReceiveActions receiveActions)
{
if (message.MessageId == "1")
{
await messageActions.DeadLetterMessageAsync(message);
}
else
{
await messageActions.CompleteMessageAsync(message);
// attempt to receive additional messages in this session
var receivedMessages = await receiveActions.ReceiveMessagesAsync(maxMessages: 10);
// you can also use the receive actions to peek messages
var peekedMessages = await receiveActions.PeekMessagesAsync(maxMessages: 10);
}
}
Bindung an ServiceBusClient
Es kann vorkommen, dass Sie an dieselbe ServiceBusClient
Bindung binden möchten, die der Trigger verwendet. Dies kann nützlich sein, wenn Sie einen Absender basierend auf der empfangenen Nachricht dynamisch erstellen müssen.
[FunctionName("BindingToClient")]
public static async Task Run(
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")]
ServiceBusReceivedMessage message,
ServiceBusClient client)
{
ServiceBusSender sender = client.CreateSender(message.To);
await sender.SendMessageAsync(new ServiceBusMessage(message));
}
Problembehandlung
Wenn Ihre Funktion eine nicht behandelte Ausnahme auslöst und Sie die Nachricht noch nicht abgeschlossen haben, versucht die Erweiterung, die Nachricht zu beenden, sodass sie sofort wieder für den Empfang verfügbar wird.
Weitere Anleitungen zur Problembehandlung finden Sie unter Überwachen Azure Functions.
Nächste Schritte
Lesen Sie die Einführung in Azure Functions oder erstellen sie eine Azure Function-Anleitung.
Mitwirken
Weitere Informationen zum Erstellen, Testen und Mitwirken zu dieser Bibliothek finden Sie in unserem CONTRIBUTING.md .
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Weitere Informationen finden Sie unter cla.microsoft.com.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.