Since chatting with Tyler Jewell and Jonas Bonér at Lightbend, I haven’t been able to get message-based architectures out of my head. I got a small taste of this type of architecture when I rebuilt our Halloween haunted house this year, which is composed of a bunch of ESP32-based sensors and actuators. In this hobby project, one thing I did without thinking much about it was to have two different types of messages: events and commands.

As I’ve been reading about AsyncAPI, they break messages down further, into Events and Request (which are in turn broken down into Queries and Commands):

Overall, events are messages but not all messages are events.

It makes me wonder if this hierarchy is comprehensive. Are there other broad types of messages typically encountered in a message-driven system? And are there standard sub-types of each of these messages, or are architects and developers left on their own to define the details of their messages each time? In complex systems that grow over time, do organizations ever lose the definitions of their message types? I could imagine systems that run for years, happily passing messages back and forth between services while no human has any idea of what they were originally intended to do.