使用 Azure 服务总线 V7 的 MassTransit:缺少属性 TokenProvider

Posted

技术标签:

【中文标题】使用 Azure 服务总线 V7 的 MassTransit:缺少属性 TokenProvider【英文标题】:MassTransit with Azure Service Bus V7: missing property TokenProvider 【发布时间】:2022-01-18 16:33:58 【问题描述】:

我将 MassTransit 升级到 V7,似乎与 Azure 服务总线的连接发生了重大变化。以前,创建IBusControl 的代码如下所示:

Bus.Factory.CreateUsingAzureServiceBus(cfg =>
                 
    cfg.Host(this.Host,
      h =>
        
          h.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
              "RootManageSharedAccessKey", this.AzureSharedAccessSignatureTokenKey);
        );
...

这不再编译,因为属性TokenProvider 不再在IServiceBusHostConfigurator 中。

提供服务总线访问密钥的新方法是什么?

【问题讨论】:

【参考方案1】:

Azure SDK v7 使用TokenCredential,这是为所有各种 v7 SDK 指定凭据的新方法。你可以阅读它in the documentation。

因此,对于 MassTransit,您可以将 TokenCredential 设置为任何受支持的凭据类型。

TokenCredential = new DefaultAzureCredential();

【讨论】:

【参考方案2】:

在 V7 中,可以在属性 NamedKeyCredential 中指定共享访问令牌。所以我们写的不是h.TokenProvider = ...,而是:

h.NamedKeyCredential = new AzureNamedKeyCredential(
    "RootManageSharedAccessKey",
    this.AzureSharedAccessSignatureTokenKey);

【讨论】:

以上是关于使用 Azure 服务总线 V7 的 MassTransit:缺少属性 TokenProvider的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线:使用函数、服务结构和 Web 作业? [关闭]

Azure 函数 - 从 Azure 密钥保管库获取服务总线连接字符串

在本地测试 Azure 服务总线,无需任何订阅或登录

在 Azure Function 中使用 xUnit 的 Moq 服务总线

具有事务范围的 Azure 服务总线

Azure 服务总线:Microsoft.Azure.WebJobs.Script.HostDisposedException:主机已释放,无法使用