C# MassTransit3&x2B;Azure服务总线队列命名约定
我在队列命名方面遇到了一个奇怪的问题,这些队列是在Azure Service Bus中创建的,由MassTransit使用 Uri是“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
”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>();
}