C# MassTransit3&x2B;Azure服务总线队列命名约定

C# MassTransit3&x2B;Azure服务总线队列命名约定,c#,azure,asp.net-web-api,masstransit,azure-servicebus-queues,C#,Azure,Asp.net Web Api,Masstransit,Azure Servicebus Queues,我在队列命名方面遇到了一个奇怪的问题,这些队列是在Azure Service Bus中创建的,由MassTransit使用 Uri是“”sb://{@namespace}.servicebus.windows.net/{path}/{queueName}” 例如,如果路径等于dev,队列名称包含dev作为子字符串,例如devices则dev被删除,我看到创建了一个名为ices的队列。 如果path=test也会发生同样的情况 我没有找到任何用于队列命名的保留字,所以我想知道是否有。 只有在ASP

我在队列命名方面遇到了一个奇怪的问题,这些队列是在Azure Service Bus中创建的,由MassTransit使用

Uri是“
”sb://{@namespace}.servicebus.windows.net/{path}/{queueName}”

例如,如果路径等于
dev
,队列名称包含
dev
作为子字符串,例如
devices
dev
被删除,我看到创建了一个名为
ices
的队列。 如果path=
test
也会发生同样的情况

我没有找到任何用于队列命名的保留字,所以我想知道是否有。

只有在ASP.NET Web Api进程中发送消息时才会出现此问题。对于Azure Worker角色,一切正常

使用的方法有:

public static Uri BuildQueueUri(string @namespace, string path, string queueName)
    {
        return new Uri($"sb://{@namespace}.servicebus.windows.net/{path}/{queueName}");
    }

protected Task<ISendEndpoint> EstablishSendEndpoint(string queueName)
    {
        Uri uri = BusConfiguration.BuildQueueUri(
            Settings.GetSetting(ConfigKeys.ServiceBusNamespace),
            Settings.GetSetting(ConfigKeys.ServiceBusPath),
            queueName);

        return BusControl.GetSendEndpoint(uri);
    }


public async Task<IHttpActionResult> SendGetIpsToInterceptCommand()
    {
        ISendEndpoint endpoint = await EstablishSendEndpoint(BusConfiguration.SendCommandsQueue);
        var guid = Guid.NewGuid();

        await endpoint.Send<ICGetItemsToInterceptCommand>(new
        {
            CommandId = guid

        });

        return Ok(guid);
    }
publicstaticuribuildqueueuri(string@namespace,stringpath,stringqueuename)
{
返回新的Uri($“sb://{@namespace}.servicebus.windows.net/{path}/{queueName}”);
}
受保护的任务Endpoint(字符串queueName)
{
Uri=BusConfiguration.BuildQueueUri(
Settings.GetSetting(ConfigKeys.ServiceBusNamespace),
Settings.GetSetting(ConfigKeys.ServiceBusPath),
队列名称);
返回BusControl.GetSendEndpoint(uri);
}
公共异步任务SendGetIpsToInterceptCommand()
{
ISendEndpoint端点=等待建立SendEndpoint(BusConfiguration.SendCommandSquee);
var guid=guid.NewGuid();
等待端点。发送(新)
{
CommandId=guid
});
返回Ok(guid);
}
MassTransit配置(使用Autofac)

专用静态无效注册表宏服务总线(ContainerBuilder builder)
{
builder.Register(c=>
Bus.Factory.CreateUsingAzureServiceBus(sbc=>
{
var serviceUri=ServiceBusEnvironment.CreateServiceUri(“sb”,
Settings.GetSetting(ConfigKeys.ServiceBusNamespace),
GetSetting(ConfigKeys.ServiceBusPath));
主机(serviceUri,h=>
{
h、 令牌提供者=
TokenProvider.CreateSharedAccessSignatureTokenProvider(
Settings.GetSetting(ConfigKeys.ServiceBusKeyName),
Settings.GetSetting(ConfigKeys.ServiceBusAccessKey),
时间跨度从天(365),
TokenScope.Namespace);
});
}))
.SingleInstance()
.As()
.As();
}

dev
是许多操作系统中的保留字,我想知道这是否有任何影响。这可能是队列名称解析中的一个错误。我将更仔细地观察并尝试复制。
private static void RegisterMicroserviceBus(ContainerBuilder builder)
    {
        builder.Register(c =>
                Bus.Factory.CreateUsingAzureServiceBus(sbc =>
                {
                    var serviceUri = ServiceBusEnvironment.CreateServiceUri("sb",
                        Settings.GetSetting(ConfigKeys.ServiceBusNamespace), 
                        Settings.GetSetting(ConfigKeys.ServiceBusPath));

                    sbc.Host(serviceUri, h =>
                    {
                        h.TokenProvider =
                            TokenProvider.CreateSharedAccessSignatureTokenProvider(
                                Settings.GetSetting(ConfigKeys.ServiceBusKeyName),
                                Settings.GetSetting(ConfigKeys.ServiceBusAccessKey), 
                                TimeSpan.FromDays(365),
                                TokenScope.Namespace);
                    });
                }))
            .SingleInstance()
            .As<IBusControl>()
            .As<IBus>();
    }