我在队列命名方面遇到了一个奇怪的问题,这些问题是在Azure Service Bus中创建的,并由MassTransit使用。
Uri是"sb://{@namespace}.servicebus.windows.net/{path}/{queueName}"
E.g。如果路径等于dev
且queueName包含dev
作为子字符串,例如devices
已移除dev
,我看到一个名为ices
的队列已创建。
如果path = test
,也会发生相同的情况。
我还没有为队列命名找到任何保留字,所以我想知道是否有。
仅在ASP.NET Web Api进程中发送消息时才会出现此问题。对于Azure Worker Role,一切正常。
使用的方法是:
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);
}
MassTransit配置(使用Autofac)
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>();
}