Mon scénario: site Web hébergé sur le cloud, où chaque instance crée un abonnement à une rubrique Service Bus pour écouter les messages.
Ma question: Comment créer des abonnements par programmation?
...
Problème: j'ai l'habitude d'utiliser l'ancienne bibliothèque WindowsAzure. J'utilise maintenant .NET Standard qui ne prend pas en charge l'ancienne bibliothèque
Solution: utilisez le package NuGet Microsoft.Azure.ServiceBus
...
Problème: il ne prend pas en charge les fonctionnalités de gestion (comme la création d'un abonnement)
Solution: utilisez également la bibliothèque NuGet Microsoft.Azure.Management.ServiceBus
...
Problème: il ne prend pas en charge l'utilisation d'une chaîne de connexion ou des clés qui vous sont fournies par le portail Azure
Solution: https://github.com/Azure-Samples/service-bus-dotnet-management donne le modèle de programmation général à utiliser.
...
Problème: WTF est le {tenantId} dont il parle?
Solution: bien clairement, il se trouve sous "Azure Active Directory" -> "Propriétés" et utilement étiqueté "ID de répertoire" au lieu de tenantId, comme on pourrait s'y attendre
...
Problème: WTF est le {clientId} et {clientSecret}?
Solution: encore plus facile. Il est évident d'après ces informations que vous devez:
...
Ok, donc l'étape 1 de l'exemple fonctionne-t-elle? AcquireTokenAsync renvoie un jeton d'accès! YAYYYYYYYYYYYYYY
result.AccessToken est le "jeton" mentionné à l'étape 2, semble-t-il.
Étape 2, 3 ... aucun problème ... à l'étape 4. Sauf utiliser à la place sbClient.Subscriptions.CreateOrUpdate
{resourceGroupName} semble assez facile - copier à partir de "Resource groups" sur le portail
...
Problème: qu'est-ce que {namespaceName} ??
Est-ce le nom du Service Bus? comme {nom} .servicebus.windows.net? Ou est-ce que l'espace de noms est complet comme {name.servicebus.windows.net}? Ou inclut-il le schéma comme {sb: //name.servicebus.windows.net} ??
...
Problème: peu importe ce que j'essaie ici, je me retrouve avec "L'opération a renvoyé un code d'état non valide 'NotFound'" à l'appel de CreateOrUpdate.
Et c'est là que je suis coincé. Où je me suis trompé?
Et sur un sidenote, le snark reflète ma frustration - j'ai vraiment l'impression que j'ai besoin d'apprendre une grande pile de technologie Azure dont je ne veux vraiment rien savoir juste pour faire quelque chose qui "devrait être simple ". Comme si j'étais aspiré dans un terrier de lapin.
[EDIT # 1] - "SubscriptionId" se révèle être l'ID d'abonnement Azure trouvé dans la section facturation du portail, ne faisant PAS référence à l'abonnement au bus de service.
[EDIT # 2] - "namespaceName" n'inclut pas .servicebus.windows.net - juste le nom lui-même
Et avec ces changements, après d'innombrables heures de recherche, IL FONCTIONNE
Microsoft.Azure.ServiceBus.3.1.0 permet de créer un ManagementClient à l'aide de ConnectionString.
private async Task CreateTopicSubscriptions()
{
var client = new ManagementClient(ServiceBusConnectionString);
for (int i = 0; i < Subscriptions.Length; i++)
{
if (!await client.SubscriptionExistsAsync(TopicName, Subscriptions[i]))
{
await client.CreateSubscriptionAsync(new SubscriptionDescription(TopicName, Subscriptions[i]));
}
}
}
Le plan d'origine pour le nouveau client Azure Service Bus ne consistait pas du tout à inclure le plan de gestion et à utiliser à la place la route Azure Active Directory. Cela s'est révélé trop problématique, comme vous l'avez souligné. L'équipe de messagerie Microsoft a mis en place un exemple pour illustrer les opérations de base.
Notez qu'il y a un PR en attente pour le faire fonctionner avec .NET Core 2.0
À l'avenir, il a été reconnu que les développeurs préfèrent accéder à Service Bass à l'aide d'une chaîne de connexion comme ils le faisaient sur l'option Azure Active Directory. Problème des opérations de gestion est déclenché pour suivre les demandes. Plan actuel est de fournir une bibliothèque de gestion légère pour le client .NET Standard.
Pour l'instant, les options consistent à tirer parti de l'ancien client pour créer des entités ou à utiliser Microsoft.Azure.Management.ServiceBus (ou Fluent) jusqu'à ce que le package de gestion soit disponible.
Mise à jour
Les opérations de gestion ont été publiées dans le cadre de la version 3.1.0 du client.