【问题标题】:ServiceBusConnectionException - Receive Transport faultedServiceBusConnection 异常 - 接收传输错误
【发布时间】:2021-07-28 19:04:38
【问题描述】:

当我在我的函数 StartService() 上使用 azure bus.Start(); 启动 masstransit 时出现以下错误我已将我的 azure 配置为 masstransit 和 autofact。错误:

MassTransit.Azure.ServiceBus.Core.ServiceBusConnectionException
  HResult=0x80131500
  Message=ReceiveTransport faulted: sb://softbaire-amilkar.servicebus.windows.net/;SharedAccessKeyName=**REMOVED**;SharedAccessKey=**REMOVED**/TeamTimeManager
  Source=mscorlib

公共交通配置:

public static IContainer ConfigureContainer()
{
    var builder = new ContainerBuilder();
    builder.AddMassTransit(cfg =>
    {
        cfg.SetKebabCaseEndpointNameFormatter();

        cfg.AddConsumer<TeamTimeManager>();

        cfg.UsingAzureServiceBus((context, conf) =>
        {
            var settings = new HostSettings
            {
                ServiceUri = new Uri("sb://softbaire-amilkar.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=UeIC0z5RPCt25SjnWdss2ssP5a6msUKNJxmLnBpm26g="),
                TokenProvider = TokenProvider.CreateManagedIdentityTokenProvider()
            };

            conf.Host(settings);

            conf.ConfigureEndpoints(context);
        });
    });

    return builder.Build();
}

这是我启动服务的地方,我得到了错误:

public void StartService()
{
    var container = CreatorContainer.ConfigureContainer();
    var bus = container.Resolve<IBusControl>();

    if (host != null)
    {
        host.Close();
    }

    host = new ServiceHost(typeof(TeamTimeManager));
    utilHost = new ServiceHost(typeof(TeamTimeUtilityManager));

    bus.Start();
    source.TraceInformation("Starting TeamTimeManager Azure Bus...");

    host.Open();
    source.TraceInformation("TeamTimeManager Started!");

    utilHost.Open();
    utilSource.TraceInformation("Starting TeamTimeUtilityManager...");
}

更新

当我在该行发表评论时,这个问题就解决了:

cfg.AddConsumer<TeamTimeManager>();

如果我添加队列或订阅,问题会再次出现

BUG

https://github.com/Azure/azure-sdk-for-net/issues/8627

【问题讨论】:

  • 我删除了您的共享访问令牌,我建议您进入 Azure 门户并重新创建共享访问密钥,因为您已将其发布在公共论坛上。

标签: c# azure masstransit


【解决方案1】:

可能是权限。 MassTransit 需要 Manage,并且您正在配置托管身份令牌提供程序。

  1. 从连接字符串中删除共享访问凭据,因为它们会与托管身份提供程序发生冲突。
  2. 确保服务标识对命名空间具有管理权限。

【讨论】:

    【解决方案2】:

    嗯,问题出在令牌提供者上。

    问题是生成的令牌连接到 azure 但没有任何队列或主题注册,当我想注册队列和主题时,问题开始了,当我想生成与队列或主题的连接时,我得到了一个错误,因为令牌对我的用户无效(奇怪),所以...我更改了生成令牌的方法,一切都开始正常工作。

    之前:

    var settings = new HostSettings
    {
       ServiceUri = new Uri("sb://xxxx-busazure.servicebus.windows.net"),
       TokenProvider = TokenProvider.CreateManagedIdentityTokenProvider()
    };
    

    之后:现在我使用CreateSharedAccessSignatureTokenProvider(),您需要将“SharedAccessKeyName”和“SharedAccessKey”作为参数发送

    var settings = new HostSettings
    {
       ServiceUri = new Uri("sb://xxxxx-busazure.servicebus.windows.net"),
       TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "xxxxxxxxxxxxxxx=")
    };
    

    排队一切顺利,最终配置方法:

            public static IContainer ConfigureContainer()
            {
                var builder = new ContainerBuilder();
    
                builder.AddMassTransit(cfg =>
                {
                    cfg.SetKebabCaseEndpointNameFormatter();
                    cfg.AddServiceBusMessageScheduler();
    
                    cfg.AddConsumer<TeamTimeManager>();
                    
                    cfg.UsingAzureServiceBus((context, conf) =>
                    {
                        conf.UseServiceBusMessageScheduler();
    
                        var settings = new HostSettings
                        {
                           ServiceUri = new Uri("sb://amilkar-busazure.servicebus.windows.net"),
                           TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "xxxxxxxxxxxxxxxxxxxxxx")
                        };
                        conf.Host(settings);
    
                        conf.ReceiveEndpoint("team-time-manager", e =>
                        {
                            e.ConfigureConsumer<TeamTimeManager>(context);
                        });
    
                        conf.ConfigureEndpoints(context);
                    });
    
                });
    
                return builder.Build();
            }
    

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2017-07-23
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多