我的情况:网站托管在云上,每个实例在其中创建对服务总线主题的订阅,以便其自己侦听消息。
我的问题:我如何以编程方式创建订阅?
...
问题:我习惯使用较旧的WindowsAzure库。现在,我正在使用不支持旧库的.NET Standard。
解决方案:使用Microsoft.Azure.ServiceBus NuGet包
...
问题:它不支持管理功能(例如创建订阅)
解决方案:还使用NuGet库Microsoft.Azure.Management.ServiceBus
...
问题:它不支持使用连接字符串或Azure门户提供给您的密钥
解决方案:https://github.com/Azure-Samples/service-bus-dotnet-management给出要使用的常规编程模式。
...
问题:WTF是它在说的{tenantId}?
解决方案:显然,它位于“ Azure Active Directory”->“ Properties”下,并像人们期望的那样有用地标记为“ Directory ID”,而不是tenantId。
...
问题:WTF是{clientId}和{clientSecret}?
解决方案:更加容易。根据这些信息,您必须:
- 转到“ Azure Active Directory”
- 点击“应用程序注册”
- 单击“创建新的应用程序注册”
- 命名,将其保留为“ Web app / API”,并在URL上添加几乎任何您想要的符号,因为即使强制性,它实际上也没有关系
- 记录每个人都知道实际上是{clientId}所指的“应用程序ID”
- 在新应用程序中,单击“设置”
- 单击“键”
- 在“密码”部分下键入一些随机描述,然后单击“保存”
- 将“值”保存在那里,因为它是{clientSecret}的秘密内容(多么聪明!因为它是秘密的!!)
- 返回“服务总线”
- 选择“访问控制(IAM)”
- 选择类似所有者/贡献者的角色
- 输入您的应用程序名称并保存
...
确定,示例的步骤1起作用了吗? AcquireTokenAsync返回访问令牌! YAYYYYYYYYYYYYY]]
result.AccessToken是步骤2中提到的“令牌”。
第2步,第3步...没问题...继续执行第4步。除了使用sbClient.Subscriptions.CreateOrUpdate之外
{{resourceGroupName}似乎很容易-从门户上的“资源组”复制]]
...
问题:{namespaceName}是什么?
这是服务总线名称吗?例如{name} .servicebus.windows.net?还是名称空间像{name.servicebus.windows.net}这样完整?还是包含{sb://name.servicebus.windows.net}这样的方案?
...
问题:无论我在这里尝试什么,最终在CreateOrUpdate调用时都会出现“操作返回了无效状态代码'NotFound'的操作。”
这就是我被困住的地方。我在哪里弄错了?
并且在旁注中,snark反映了我的挫败感-确实感觉好像我需要学习大量的Azure技术,我真的不想要了解任何事情,只是为了做“应该做的事”。简单”。就像我被兔子洞吸了一样。
[[EDIT#1]-“ SubscriptionId”原来是在门户网站的计费部分下找到的AZURE订阅ID,不涉及服务总线订阅。
[[EDIT#2]-“ namespaceName”不包括.servicebus.windows.net-只是名称本身
随着这些变化,经过无数小时的研究,它确实起作用了>>
我的情况:网站托管在云上,每个实例在其中创建对服务总线主题的订阅,以便其自己侦听消息。我的问题:如何以编程方式创建...
Microsoft.Azure.ServiceBus.3.1.0允许使用ConnectionString创建ManagementClient。
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]));
}
}
}
新Azure Service Bus客户端的原始计划根本不包括管理平面,而是使用Azure Active Directory路由。正如您已经指出的那样,这已被证明太麻烦了。 Microsoft邮件团队已将sample组合在一起以演示基本操作。
注意,有一个pending PR使其可与.NET Core 2.0一起使用
向前迈进,人们认识到开发人员喜欢使用连接字符串来访问Service Bass,就像他们过去使用Azure Active Directory选项一样。引发Management Operations issue以跟踪请求。 Current plan为.NET Standard客户端提供轻量级管理库。
目前,这些选项要么利用旧客户端创建实体,要么使用Microsoft.Azure.Management.ServiceBus(或Fluent),直到管理包可用为止。
更新
管理操作作为客户端的3.1.0版本的一部分发布。