MassTransit 3的AzureServiceBus在队列名称前面加了一个斜线



当我尝试使用MassTransit 3 在Azure中运行应用程序时,收到以下错误

实体名称或路径不能包含"/"作为前缀或后缀。这个提供的值为"/profile.api"。参数名称:entityName

我能看到前缀添加到队列名称的唯一方法是通过MassTransit。

奇怪的是,队列是在我的Azure门户中以"profile.api"的名称创建的。

其他人以前经历过这种情况吗?我不确定这是MassTransit的错误,还是我在配置中错过了一步。

下面是完整的堆栈。

谢谢。

[ArgumentException:实体名称或路径不能包含"/"作为前缀或后缀。提供的值为"/profile.api"。参数name:entityName]
Microsoft.ServiceBus.Common.AsyncResult.End(IAsyncResult结果)+381Microsoft.ServiceBus.MessagingFactory.EndCreateMessageReceiver(IAsyncResult结果)+70
System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction,Action 1 endAction, Task 1 promise,布尔值requiresSynchronization)+86
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.AzureServiceBusTransport.Pipeline.-Send>d__7.MoveNext()+794 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()+26 MassTransit.AzureServiceBusTransport.Pipeline.-Send>d__7.MoveNext()+2756 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.AzureServiceBusTransport.Pipeline.d_5.MoveNext()+1599 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.AzureServiceBusTransport。<b_0>d.移动下一个()+531System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+58
MassTransit.Interals.Extensions.d_0 1.MoveNext() +924 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 MassTransit.<StartAsync>d__29.MoveNext() +1154
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +26
MassTransit.<StartAsync>d__29.MoveNext() +2025
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 MassTransit.Util.TaskUtil.Await(Func
1任务工厂,CancellationToken CancellationToken)+222
MassTransit.MassTransitBus.MassTransity.IBusControl.Start()+61
SampleApp.Startup.ConfigureBus()+33
SampleApp.Startup.Configuration(IAppBuilder应用程序)+428

事实证明,与MassTransit测试运行其azure配置的方式相比,我的应用程序的配置方式有一个非常微妙的差异。

而我有(不工作)

public class AzureBusModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.Register(context =>
        {
            var busControl = Bus.Factory.CreateUsingAzureServiceBus(sbc =>
            {
                var host = sbc.Host(new Uri("sb://" + ConfigurationManager.AppSettings["AzureEndPoint"]), h =>
                {
                    h.OperationTimeout = TimeSpan.FromSeconds(5);
                    h.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
                        ConfigurationManager.AppSettings["AzureKeyName"],
                        ConfigurationManager.AppSettings["AzureKeyValue"]);
                });
                sbc.UseSerilog();
                sbc.UseJsonSerializer();
                //sbc.UseRetry(Retry.Exponential(10.Seconds(), 3.Minutes(), 10.Seconds()));
                sbc.ReceiveEndpoint(host, ConfigurationManager.AppSettings["QueueName"], ep =>
                {
                    ep.LoadFrom(context);
                });
            });
            Log.Information("Finished Configuring MassTransit using Azure");
            return busControl;
        })
        .SingleInstance()
        .As<IBusControl>()
        .As<IBus>();
    }
}

更改以下解决了我的问题

var serviceUri = ServiceBusEnvironment.CreateServiceUri("sb",
    ConfigurationManager.AppSettings["AzureEndpoint"],
    ConfigurationManager.AppSettings["AzureEndpointName"]);
var host = sbc.Host(serviceUri, h =>
{
    // [...]
}

我希望这能帮助其他有类似问题的人。

最新更新