You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rebus集成Azure ServiceBus实现Pub/Sub时出现400错误求助

Rebus切换到Azure ServiceBus后出现400 Bad Request错误

我正在探索Rebus库,已在Microsoft.NET.Sdk.Worker项目中通过FileSystem传输成功实现Pub/Sub,但切换到Azure ServiceBus时遇到问题。

配置代码(Program.cs)

IHost host = Host.CreateDefaultBuilder(args)
        .ConfigureServices((context, services) => {
            services.AddLogging();

            services.AddRebus(
                (config, provider) => {
                    config
                        .Logging(l => l.Console())
                        .Routing(r => r.TypeBased().MapAssemblyOf<CreateNewReportMessage>(busConfig.MainQueue))
                        //.Transport(x => x.UseFileSystem(busConfig.FileSystemTransportBaseDirectory, busConfig.MainQueue))
                        //.Subscriptions(x => x.UseJsonFile(Path.Combine(busConfig.FileSystemTransportBaseDirectory, "rebus_subscriptions.json")))
                        .Transport(x => x.UseAzureServiceBus(busConfig.AzureSBConnectionString, busConfig.MainQueue).AutomaticallyRenewPeekLock());
                    return config;
                },
                onCreated: async bus => {
                    await bus.Subscribe<CreateNewReportMessage>();
                }
            );
            services.AutoRegisterHandlersFromAssemblyOf<Program>();
        })
        .Build();

    await host.RunAsync();

错误日志

INFO] [DBG] Rebus.AzureServiceBus.AzureServiceBusTransport (Thread #1): Registering subscription for topic "MyServiceBus/MyServiceBus.Messages.CreateNewReportMessage"
INFO]       Successfully created bus instance RebusBus Rebus 1 (isDefaultBus: True)
INFO]       Application started. Press Ctrl+C to shut down.
INFO] fail: Microsoft.Extensions.Hosting.Internal.Host[9]
INFO]       BackgroundService failed
INFO]        ---> Azure.RequestFailedException: The specified HTTP verb (GET) is not valid. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:1808
INFO]       Status: 400 (Bad Request)
INFO]          --- End of inner exception stack trace ---
INFO]          at Azure.Messaging.ServiceBus.Administration.HttpRequestAndResponse.ThrowIfRequestFailedAsync(Request request, Response response)
INFO]          at Azure.Messaging.ServiceBus.Administration.HttpRequestAndResponse.SendHttpRequestAsync(Request request, CancellationToken cancellationToken)
INFO]          at Azure.Messaging.ServiceBus.Administration.HttpRequestAndResponse.GetEntityAsync(String entityPath, String query, Boolean enrich, CancellationToken can
INFO]          at Azure.Messaging.ServiceBus.Administration.ServiceBusAdministrationClient.TopicExistsAsync(String name, CancellationToken cancellationToken)
INFO]          at Rebus.AzureServiceBus.AzureServiceBusTransport.EnsureTopicExists(String normalizedTopic)
INFO]          at Rebus.AzureServiceBus.AzureServiceBusTransport.<>c__DisplayClass25_0.<RegisterSubscriber>b__0>d.MoveNext()
INFO]       --- End of stack trace from previous location ---
INFO]          at Rebus.Internals.ExceptionIgnorant.Execute(Func`1 function, CancellationToken cancellationToken)
INFO]          at Rebus.Internals.ExceptionIgnorant.Execute(Func`1 function, CancellationToken cancellationToken)
INFO]          at Rebus.AzureServiceBus.AzureServiceBusTransport.RegisterSubscriber(String topic, String subscriberAddress)
INFO]          at Rebus.Bus.RebusBus.InnerSubscribe(String topic)

解决方案

1. 检查连接字符串权限

错误提示HTTP动词GET无效,核心原因是当前使用的Azure ServiceBus连接字符串缺少管理权限。Rebus在订阅消息时需要检查/创建主题和订阅,这些操作需要使用拥有Manage权限的连接字符串(比如Azure门户中RootManageSharedAccessKey对应的连接字符串)。

2. 修正主题名称格式

日志中显示的主题名称MyServiceBus/MyServiceBus.Messages.CreateNewReportMessage包含/,这不符合Azure ServiceBus的命名规则(主题名称不能包含/、\等特殊字符)。可以通过以下方式修改:
在Rebus配置中添加Azure ServiceBus订阅存储,自动处理命名逻辑:

config.Subscriptions(s => s.UseAzureServiceBusSubscriptions());

3. 跳过自动创建主题/订阅(可选)

如果不想赋予连接字符串管理权限,可以提前在Azure门户手动创建对应的主题和订阅,然后在Rebus配置中禁用自动创建逻辑:

.Transport(x => x.UseAzureServiceBus(busConfig.AzureSBConnectionString, busConfig.MainQueue)
    .AutomaticallyRenewPeekLock()
    .DoNotCreateTopics()
    .DoNotCreateSubscriptions());

内容的提问来源于stack exchange,提问作者harry777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:01:20