Why would I care? | Definitions: Messaging or eventing infrastructure | Resources: Introductions and Patterns | Resources: Open Standards | Resources: Products & Cloud Services
Once you've read through this intro, you will find that this document contains a (growing) list of resources that cover whether and how to use asynchronous messaging/queueing and eventing infrastructures with your applications effectively and which you can use for self-study purposes.
I am the product architect of the messaging and eventing services in the Microsoft Azure cloud and have helped building these capabilities for over 15 years now, starting well before the name "Azure" even existed.
Our team owns multiple hyperscale broker platforms (Azure Service Bus, Event Hubs, Event Grid, and Relay) that are deployed in hundreds of large clusters in over 70 Azure regions all around the world and handle many (!) trillion (!) requests each day (!). We also invented, prototyped, and productized several other Azure capabilities (Azure IoT Hub, Azure Notification Hubs, Tenant Resource Provisioning) that are now owned by different teams at Microsoft.
In addition to the product work, I am deeply engaged in open interoperability standards and represent Microsoft on the OASIS AMQP Technical Committee (as co-chair), the OASIS MQTT Technical Committee, the CNCF Open Telemetry Working Group, the CNCF CloudEvents and CNCF xRegistry projects, and the CNCF Serverless Working Group. In the past, I've also been a member of the OPC Foundations Technical Advisory Council and the OPC UA Working Group where I've worked on the PubSub specification in particular. Relevant technical documents are also linked below.
In addition to pointing to resources, allow me to also set some context with a few definitions (some of which may be surprising) of key concepts of messaging and eventing. I will keep these brief since the concepts are covered more broadly in many of the resources I point to.
Generally, if you are building software that requires more than one computer to do its job, you should know about asynchronous messaging concepts.
"Asynchronous" means here: Your application sends a message or event and then carries on doing something else. It does not sit around waiting for an outcome.
For many developers, that is the first giant mental hurdle, since we've all been raised on "imperative" programming models. You make a function call and cause some work to happen and only once that work has been reported as done (or failed) your own code continues with its work.
Yet, we all use asynchronous messaging every day in the physical world. If we want to send a gift to someone in a different city, we will go to the post office and entrust the postal service with the package. The postal service takes care of getting it to the destination and also tracks and reports whether the package has been delivered successfully. Once the package has been delivered, your friend might then call you and excitedly thank you for the gift you sent. If you ask for it you will get feedback, but maybe on a different channel and after however long the handling and delivery took and usually with a clear reference to the package you sent.
That is what asynchronous messaging infrastructure does, but for your apps.
"Message broker", "queue", "service bus", "event router", "event stream engine", "event aggregator", are all names for asynchronous messaging and eventing infrastructure elements and the list is by no means exhaustive. I will give you a brief definitions for all the words in those names for orientation.
You can find all my published presentations as PowerPoint files and PDFs in this folder. Content is generally CC-BY 4.0.
This section lists several open standards efforts that are important to the messaging space. The focus of this section is on open and product/project-neutral data formats and protocol standards, not on project-proprietary wire formats even if the projects are open source.
CloudEvents is a common information model for events. It defines what an event is and what a set of common attributes are that make the event useful in many contexts. CloudEvents then defines formats (JSON, Avro, AMQP, Protbuf, XML) in which a CloudEvent can be expressed and protocol bindings for how CloudEvents can be transported (HTTP, AMQP, MQTT, Kafka).
xRegistry is a project spawned from the CloudEvents project that aims to provide a common API and document format for schema and message catalogs and discovery services. It is a companion to CloudEvents and aims to provide a common way to find and use schemas and messages in a CloudEvents context, but also for general messaging infrastructures. xRegistry is extensible to support other metadata models.
AMQP ("Advanced Message Queue Protocol") is the global standard enterprise messaging protocol. Initiated by JPMorgan, it's the standard protocol in many areas of the financial industry, trade, and industrial applications. It has been developed in OASIS and standardized by ISO as 19464:2014.
AMQP is implemented by a most major queue-oriented message brokers.
MQTT (formerly "MQ Telemetry Transport") is a lightweight pubsub protocol that was initially developed by IBM as a companion protocol to their MQ product. IBM then submitted it for standardization to OASIS, where the input specification was turned into version 3.1.1. and the TC then developed version 5.0 from there, with significant input from Microsoft.
Avro is a data serialization system that provides rich data structures and a compact, fast, binary data format. At Microsoft, we like Avro's Schema format even more than we like its binary encoding. Unfortunately and fortunately, the Avro project is a bit of a "sleeping beauty" and has not seen much evolution in the last few years. We think it could need a bit of a jolt and to that effect, we have a few pending proposals that we hope to get into the project soon.
An incomplete list of books about product-/project-neutral messaging and eventing principles and patterns. I am an impatient book reader and prefer going straight to authoritative documents, therefore I am happy to take PRs for this section from readers who've been helped by particular books.
Microsoft Fabric is Microsoft's data platform. The "Real-Time Intelligence" feature set combines event streaming, event stores and event processing into an easy-to-use SaaS offering aimed at data analysts and data scientists. The "Event Streams" feature set is built on top of the popular and proven Microsoft Azure Event Hubs and Azure Stream Analytics services and provides a fully managed, scalable, and secure event streaming platform. The Fabric Eventhouse is the SaaS-incarnation of the Azure Data Explorer service, which is the evolution of the Kusto database that is used to power many of Microsoft's own telemetry systems. Fabric Data Activator allows acting on complex conditions in real-time, putting processes or people into the loop of processes when needed.
Microsoft Fabric
Main
product page on Microsoft.com
Microsoft Fabric Product Access
Get
started immediately with the Microsoft Fabric platform. There is a very
generous free trial offering available.
Microsoft Fabric Documentation
Entry point into the Fabric docs
This is a list of the Azure Messaging services.
AWS has a fleet of messaging services which reflects very similar architectural considerations as the Azure services.
The Apache Software Foundation hosts several popular open source projects that produce message and event broker infrastructures.
The Cloud Native Computing Foundation also hosts a few messaging and eventing centric projects.
The Eclipse Foundation has a strong IoT focus and hosts various MQTT-related projects. It is also hosting the Jakarta Messaging project that carries forward the popular JMS standard.
345 followers · starred Jun 2022
652 followers · starred Mar 2022
982 followers · starred Feb 2022
144 followers · starred Mar 2022
Why would I care? | Definitions: Messaging or eventing infrastructure | Resources: Introductions and Patterns | Resources: Open Standards | Resources: Products & Cloud Services
Once you've read through this intro, you will find that this document contains a (growing) list of resources that cover whether and how to use asynchronous messaging/queueing and eventing infrastructures with your applications effectively and which you can use for self-study purposes.
I am the product architect of the messaging and eventing services in the Microsoft Azure cloud and have helped building these capabilities for over 15 years now, starting well before the name "Azure" even existed.
Our team owns multiple hyperscale broker platforms (Azure Service Bus, Event Hubs, Event Grid, and Relay) that are deployed in hundreds of large clusters in over 70 Azure regions all around the world and handle many (!) trillion (!) requests each day (!). We also invented, prototyped, and productized several other Azure capabilities (Azure IoT Hub, Azure Notification Hubs, Tenant Resource Provisioning) that are now owned by different teams at Microsoft.
In addition to the product work, I am deeply engaged in open interoperability standards and represent Microsoft on the OASIS AMQP Technical Committee (as co-chair), the OASIS MQTT Technical Committee, the CNCF Open Telemetry Working Group, the CNCF CloudEvents and CNCF xRegistry projects, and the CNCF Serverless Working Group. In the past, I've also been a member of the OPC Foundations Technical Advisory Council and the OPC UA Working Group where I've worked on the PubSub specification in particular. Relevant technical documents are also linked below.
In addition to pointing to resources, allow me to also set some context with a few definitions (some of which may be surprising) of key concepts of messaging and eventing. I will keep these brief since the concepts are covered more broadly in many of the resources I point to.
Generally, if you are building software that requires more than one computer to do its job, you should know about asynchronous messaging concepts.
"Asynchronous" means here: Your application sends a message or event and then carries on doing something else. It does not sit around waiting for an outcome.
For many developers, that is the first giant mental hurdle, since we've all been raised on "imperative" programming models. You make a function call and cause some work to happen and only once that work has been reported as done (or failed) your own code continues with its work.
Yet, we all use asynchronous messaging every day in the physical world. If we want to send a gift to someone in a different city, we will go to the post office and entrust the postal service with the package. The postal service takes care of getting it to the destination and also tracks and reports whether the package has been delivered successfully. Once the package has been delivered, your friend might then call you and excitedly thank you for the gift you sent. If you ask for it you will get feedback, but maybe on a different channel and after however long the handling and delivery took and usually with a clear reference to the package you sent.
That is what asynchronous messaging infrastructure does, but for your apps.
"Message broker", "queue", "service bus", "event router", "event stream engine", "event aggregator", are all names for asynchronous messaging and eventing infrastructure elements and the list is by no means exhaustive. I will give you a brief definitions for all the words in those names for orientation.
You can find all my published presentations as PowerPoint files and PDFs in this folder. Content is generally CC-BY 4.0.
This section lists several open standards efforts that are important to the messaging space. The focus of this section is on open and product/project-neutral data formats and protocol standards, not on project-proprietary wire formats even if the projects are open source.
CloudEvents is a common information model for events. It defines what an event is and what a set of common attributes are that make the event useful in many contexts. CloudEvents then defines formats (JSON, Avro, AMQP, Protbuf, XML) in which a CloudEvent can be expressed and protocol bindings for how CloudEvents can be transported (HTTP, AMQP, MQTT, Kafka).
xRegistry is a project spawned from the CloudEvents project that aims to provide a common API and document format for schema and message catalogs and discovery services. It is a companion to CloudEvents and aims to provide a common way to find and use schemas and messages in a CloudEvents context, but also for general messaging infrastructures. xRegistry is extensible to support other metadata models.
AMQP ("Advanced Message Queue Protocol") is the global standard enterprise messaging protocol. Initiated by JPMorgan, it's the standard protocol in many areas of the financial industry, trade, and industrial applications. It has been developed in OASIS and standardized by ISO as 19464:2014.
AMQP is implemented by a most major queue-oriented message brokers.
MQTT (formerly "MQ Telemetry Transport") is a lightweight pubsub protocol that was initially developed by IBM as a companion protocol to their MQ product. IBM then submitted it for standardization to OASIS, where the input specification was turned into version 3.1.1. and the TC then developed version 5.0 from there, with significant input from Microsoft.
Avro is a data serialization system that provides rich data structures and a compact, fast, binary data format. At Microsoft, we like Avro's Schema format even more than we like its binary encoding. Unfortunately and fortunately, the Avro project is a bit of a "sleeping beauty" and has not seen much evolution in the last few years. We think it could need a bit of a jolt and to that effect, we have a few pending proposals that we hope to get into the project soon.
An incomplete list of books about product-/project-neutral messaging and eventing principles and patterns. I am an impatient book reader and prefer going straight to authoritative documents, therefore I am happy to take PRs for this section from readers who've been helped by particular books.
Microsoft Fabric is Microsoft's data platform. The "Real-Time Intelligence" feature set combines event streaming, event stores and event processing into an easy-to-use SaaS offering aimed at data analysts and data scientists. The "Event Streams" feature set is built on top of the popular and proven Microsoft Azure Event Hubs and Azure Stream Analytics services and provides a fully managed, scalable, and secure event streaming platform. The Fabric Eventhouse is the SaaS-incarnation of the Azure Data Explorer service, which is the evolution of the Kusto database that is used to power many of Microsoft's own telemetry systems. Fabric Data Activator allows acting on complex conditions in real-time, putting processes or people into the loop of processes when needed.
Microsoft Fabric
Main
product page on Microsoft.com
Microsoft Fabric Product Access
Get
started immediately with the Microsoft Fabric platform. There is a very
generous free trial offering available.
Microsoft Fabric Documentation
Entry point into the Fabric docs
This is a list of the Azure Messaging services.
AWS has a fleet of messaging services which reflects very similar architectural considerations as the Azure services.
The Apache Software Foundation hosts several popular open source projects that produce message and event broker infrastructures.
The Cloud Native Computing Foundation also hosts a few messaging and eventing centric projects.
The Eclipse Foundation has a strong IoT focus and hosts various MQTT-related projects. It is also hosting the Jakarta Messaging project that carries forward the popular JMS standard.
345 followers · starred Jun 2022
652 followers · starred Mar 2022
982 followers · starred Feb 2022
144 followers · starred Mar 2022