Azure Service Bus Pub/Sub Native Integration

NuGet Package: NServiceBus.Transport.AzureServiceBus (1.x)
Target Version: NServiceBus 7.x

This sample shows how to subscribe to events published by an NServiceBus endpoint using the Azure Service Bus API

Prerequisites

An environment variable named AzureServiceBus_ConnectionString with the connection string for the Azure Service Bus namespace.

Code walk-through

The sample contains three executable projects:

  • Publisher - an NServiceBus endpoint that publishes EventOne and EventTwo events.
  • NativeSubscriberA - subscribes to EventOne event published by the Publisher.
  • NativeSubscriberB - subscribes to both events published by the Publisher.

Setting up namespace entities

Each of the subscribers requires a topic subscription to receive the events published by the Publisher. The subscriptions are created on the bundle-1 topic which is the default name used by NServiceBus endpoints.

await client.CreateSubscriptionAsync(new SubscriptionDescription(topicPath, subscriptionName)
{
    LockDuration = TimeSpan.FromMinutes(5),
    EnableDeadLetteringOnFilterEvaluationExceptions = false,
    MaxDeliveryCount = int.MaxValue,
    EnableBatchedOperations = true,
}, new RuleDescription(ruleName, sqlFilter)).ConfigureAwait(false);

Subscription filters

Subscriptions created by NativeSubscriberA and NativeSubscriberB both contain a single filtering rule. NativeSubscriberA subscribes to the EventOne events only by specifying an SQL subscription rule (event-one) that matches the event type name stored in the event properties collection:

await TopologyManager.CreateSubscription(
    ConnectionString,
    subscriptionName,
    ruleName:"event-one", 
    sqlFilter: new SqlFilter($"[NServiceBus.EnclosedMessageTypes] LIKE '%{typeof(EventOne).FullName}%'")
    );

The other subscriber uses TrueFilter in the all-events rule which ensures that both EventOne and EventTwo events are routed to its subscription.

Things to note

  • The use of the AzureServiceBus_ConnectionString environment variable mentioned above
  • Execute Publisher first to ensure that the topic is created

Related Articles


Last modified