MassTransit3 + Azure Service Bus队列命名约定

时间:2017-02-06 20:02:55

标签: c# azure asp.net-web-api masstransit azure-servicebus-queues

我在队列命名方面遇到了一个奇怪的问题,这些问题是在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>();
    }

0 个答案:

没有答案