Rebus.AzureServiceBus icon indicating copy to clipboard operation
Rebus.AzureServiceBus copied to clipboard

LegacyV3NameFormatter.FormatQueueName is not compatibe with Rebus up to 6.0.3

Open gaevoy opened this issue 4 years ago • 3 comments

LegacyV3NameFormatter.FormatQueueName is not compatible with naming convention of Rebus up to 6.0.3. Same goes to LegacyNameFormatter.

Also it would be nice to specify a version using .UseLegacyNaming(), for instance .UseLegacyNaming(RebusVersion.V6) or .UseLegacyNaming(RebusVersion.V3)

Before 7.x

Queue name: Foo-BAR-1 -> foo-bar-1 https://github.com/rebus-org/Rebus.AzureServiceBus/blob/6.0.7/Rebus.AzureServiceBus/AzureServiceBus/AzureServiceBusTransport.cs#L76

After 7.x

Queue name: Foo-BAR-1 -> foo_bar_1 https://github.com/rebus-org/Rebus.AzureServiceBus/blob/7.1.3/Rebus.AzureServiceBus/AzureServiceBus/AzureServiceBusTransport.cs#L101 https://github.com/rebus-org/Rebus.AzureServiceBus/blob/7.1.3/Rebus.AzureServiceBus/AzureServiceBus/NameFormat/LegacyV3NameFormatter.cs#L14-L22

Workaround

public class LegacyV3NameFormatterFixed : INameFormatter
{
    private static readonly LegacyV3NameFormatter Original = new LegacyV3NameFormatter();

    public string FormatQueueName(string queueName)
    {
        return queueName.ToLowerInvariant();
    }

    public string FormatSubscriptionName(string subscriptionName)
    {
        return Original.FormatSubscriptionName(subscriptionName);
    }

    public string FormatTopicName(string topicName)
    {
        return Original.FormatTopicName(topicName);
    }
}
// boot logic
_activator = new BuiltinHandlerActivator();
Configure.With(_activator)
.Transport(t => t.UseAzureServiceBusAsOneWayClient("...").UseLegacyNaming())
.Options(o => o.Decorate<INameFormatter>(_ => new LegacyV3NameFormatterFixed()))
.Start();

gaevoy avatar Jun 05 '20 10:06 gaevoy

Hi @gaevoy , but.... my memory might be failing me, but I think the point of "legacy naming" with Rebus' Azure Service Bus transport v7 is to emulate the naming of v6, including its tendency to be overly conservative with queue names.

It shouldn't have any relation to the version of Rebus you're using, so if that's the case for you, then that's something we'll need to investigate...

mookid8000 avatar Jun 06 '20 09:06 mookid8000

It shouldn't have any relation to the version of Rebus you're using

Right. I mean version of Rebus.AzureServiceBus. So main issue it is not backward compatible with previous version.

I guess, it is okay but should be easy way how to configure it.

gaevoy avatar Jun 08 '20 07:06 gaevoy

Hmm.... I must admit I'm very hesitant to make additional changes regarding naming, because we've made such a mess already 😁 I'm afraid I'll make things even more confusing.

mookid8000 avatar Jun 12 '20 07:06 mookid8000