MindMap: Azure Eventing/Message Integration Services
Choosing an cloud native eventing and messaging service can be tricky, specially when you have multiple options. All Azure engineers starting to use a messaging/eventing workload need to think deeply before making a final selection.
Services Available
| **Service** | **Primary Purpose** |
|-----------------|----------------------------------------------------------------------------------|
| *Service Bus* | Enterprise Messaging with Complex Routing and Transactions |
| *Event Hubs* | High Throughput Event Streaming with Real-Time Analytics and IoT |
| *Event Grid* | Event-Driven Architectures, Serverless, and Simplified Event-Based Programming |
| *Storage Queues*| Simple Queues for Basic Point-to-Point Messaging and Cost-Effective Communication|
Event Hub, Event Grid and Service Bus are the three key services we are going to discuss here.
Common Features of the three key services:
- All the services are fully managed and cloud-native.
- Choice of service tier offerings are available for all the services.
- All of them offer very high and seemless scaling.
Considerations for Service Selection
The top three consideration for choosing between the above services is as follows:
Type of workload to support
This is the biggest consideration — you need to carefully inspect if you need messaging or an eventing workload. In case of a messaging workload forward selection is to use the Service Bus
In the case of Eventing workloads — you will have to choose between Event Hub or Event Grid. Your next action should be to select the type of architecture to be utilised.
Type of Architecture
Event Hub and Event Grid are based on two different architectures. Event Grid is a fully managed service built on Serverless. Whereas Event Hub is fully managed PAAS service and comes with options to choose different service tiers giving controls on service level.
Cost/Budget Available
Service Bus and Event Hubs have a predictable cost based on the service tiers used in an environment. Event Grid is fully managed and serverless, in case of unknown volumes costs can spiral out of hand.
Mindmap
Here is very basic mindmap to choose between different services.

Here is the Mermaid graph markup used to generate above mindmap. Feel free to alter and use this in your architecture and design work. It can render using live mermaid editor or by using Mermad javascript API available here as point #3.
graph LR
A[Select Azure Messaging Service]
B[Azure Service Bus]
C[Azure Event Hubs]
E[Azure Event Grid]
D[Azure Storage Queues]
A -->|Workload Type - Enterprise Messaging | B
A -->|Throughput Needs - Event Streaming| C
A -->|Event-Driven Scenarios - Event-Driven Architectures| E
A --> |Simplicity and Cost - Simple Queues| D
B --> SubB1[Complex Routing]
B -->| | SubB2[Transactions]
B -->| | SubB3[Topics and Subscriptions]
B -->|Purpose| SubB4[Reliable Message Delivery]
C -->SubC1[High Throughput]
C -->| | SubC2[At-Least-Once Delivery]
C -->| | SubC3[Partitioning]
C -->|Purpose| SubC4[Real-Time Analytics, IoT]
D --> SubD1[Basic Point-to-Point]
D -->| | SubD2[Decoupling Components]
D -->| | SubD3[Cost-Effective]
D -->|Purpose| SubD4[Asynchronous Communication]
E --> SubE1[Serverless]
E -->| | SubE2[Dynamic Event Routing]
E -->| | SubE3[Integration with Azure Services]
E -->|Purpose| SubE4[Simplify Event-Based Programming]
style A fill:#66ccff,stroke:#333,stroke-width:2px, font-color:black;
style B fill:#99ff99,stroke:#333,stroke-width:2px, font-color:black;
style C fill:#ffcc66,stroke:#333,stroke-width:2px, font-color:black;
style D fill:#ff9999,stroke:#333,stroke-width:2px, font-color:black;
style E fill:#ccffcc,stroke:#333,stroke-width:2px, font-color:black;
style SubB1 fill:#ccffcc,stroke:#333,stroke-width:2px, font-color:black;
style SubC1 fill:#ffddcc,stroke:#333,stroke-width:2px, font-color:black;
style SubD1 fill:#ffcccc,stroke:#333,stroke-width:2px, font-color:black;
style SubE1 fill:#ccffcc,stroke:#333,stroke-width:2px, font-color:black;
style SubB1 fill:#ccffcc,stroke:#333,stroke-width:2px, font-color:black, font-weight:bold;
style SubC1 fill:#ffddcc,stroke:#333,stroke-width:2px, font-color:black, font-weight:bold;
style SubD1 fill:#ccffcc,stroke:#333,stroke-width:2px, font-color:black, font-weight:bold;
style SubE1 fill:#ffcccc,stroke:#333,stroke-width:2px, font-color:black, font-weight:bold;
PS: Used AI Chatbots to prepare some content of this blog post.