Roadmap › Microsoft Azure for .NET Developers › Module: Integration and Messaging
Lessons in this course (14)

9. Service Bus vs Event Grid vs Event Hubs vs Storage Queues

Intermediate★ Must knowLesson 9 of 14
Service BusEvent GridEvent HubsStorage Queue
TypeEnterprise message brokerEvent routing (pub/sub, push)Event streaming / telemetry ingestionSimple queue
PatternQueues + topics/subscriptionsDiscrete reactive events ("blob created")High-volume streams with partitions, replayBasic work queue
FeaturesFIFO via sessions, transactions, duplicate detection, dead-letter queue, scheduled messages, at-least-once / peek-lockFiltering, retries, dead-lettering, CloudEvents, MQTTMillions events/s, consumer groups, retention, Kafka endpoint, Capture to storage64 KB msgs, huge queues, cheap
UseOrders, payments, workflows between servicesReact to Azure resource/app events, webhooksIoT telemetry, logs, clickstreamsSimple background jobs
csharp
await using var client = new ServiceBusClient("sb-shop.servicebus.windows.net", new DefaultAzureCredential());
await using var sender = client.CreateSender("orders");
await sender.SendMessageAsync(new ServiceBusMessage(BinaryData.FromObjectAsJson(order)) { MessageId = order.Id.ToString() });

await using var processor = client.CreateProcessor("orders", new ServiceBusProcessorOptions { MaxConcurrentCalls = 10, AutoCompleteMessages = false });
processor.ProcessMessageAsync += async args =>
{
    var o = args.Message.Body.ToObjectFromJson<Order>();
    await Handle(o);
    await args.CompleteMessageAsync(args.Message);          // otherwise retried; after MaxDeliveryCount → dead-letter queue
};
processor.ProcessErrorAsync += args => Task.CompletedTask;
await processor.StartProcessingAsync();

Logic Apps — low-code workflows with hundreds of connectors (Office 365, SAP, Salesforce). API Management (APIM) — API gateway: publish, secure (JWT validation, subscription keys), throttle (rate-limit policies), transform, cache, version, developer portal.