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 publishesEventOne
andEventTwo
events.NativeSubscriberA
: an executable subscribing to theEventOne
event published by thePublisher
.NativeSubscriberB
: an executable subscribing to both events published by thePublisher
.
Running the sample
- First, run the
Publisher
project by itself. This will create all the necessary publish/subscribe infrastructure in Azure Service Bus, including the defaultbundle-1
topic. - Run the projects normally so that all endpoints start.
- In the
Publisher
window, press any key to publish an event.- The endpoint in the
NativeSubscriberA
window will receiveEventOne
. - The endpoint in the
NativeSubscriberB
window will receive bothEventOne
andEventTwo
.
- The endpoint in the
Setting up namespace entities
Each subscriber 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 CreateSubscriptionOptions(topicPath, subscriptionName)
{
LockDuration = TimeSpan.FromMinutes(5),
EnableDeadLetteringOnFilterEvaluationExceptions = false,
MaxDeliveryCount = int.MaxValue,
EnableBatchedOperations = true,
}, new CreateRuleOptions(ruleName, sqlFilter));
Subscription filters
Subscriptions created by NativeSubscriberA
and NativeSubscriberB
contain a single filtering rule. NativeSubscriberA
subscribes to the EventOne
events only by specifying a 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 SqlRuleFilter($"[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.