...

/

Fundamentals of a Messaging System

Fundamentals of a Messaging System

Get familiar with the basics and functionality of messaging systems in Node.js applications.

When talking about messages and messaging systems, there are four fundamental elements to take into consideration:

  • The direction of the communication, which can be one-way only or a request/reply exchange

  • The purpose of the message, which also determines its content

  • The timing of the message, which can be sent and received in-context (synchronously) or out-of-context (asynchronously)

  • The delivery of the message, which can happen directly or via a broker

One-way vs. request/reply patterns

The most fundamental aspect of a messaging system is the direction of the communication, which often also determines its semantics.

The simplest communication pattern is when the message is pushed one way from a source to a destination; this is a trivial situation, and it doesn’t need much explanation:

Press + to interact
One-way communication
One-way communication

A typical example of one-way communication is an email or a web server that sends a message to a connected browser using WebSockets, or a system that distributes tasks to a set of workers.

On the other side, we have the Request/Reply exchange pattern, where the message in one direction is always matched (excluding error conditions) by a message in the opposite direction. A typical example of this exchange pattern is the invocation of a web service or sending a query to a database. The following illustration shows this simple and well-known scenario:

Press + to interact
Request/Reply message exchange pattern
Request/Reply message exchange pattern

The Request/Reply pattern might seem a trivial pattern to implement, however, as we’ll see later, it becomes more complicated when the communication channel is asynchronous or involves multiple nodes. Take a look at the example represented in the following illustration:

Press + to interact
Multi-node Request/Reply communication
Multi-node Request/Reply communication

With the setup shown in the illustration above, we can appreciate the complexity of some Request/Reply patterns better. If we consider the direction of the communication between any two nodes, we can surely say that it’s one way. However, from a global point of view, the initiator sends a request and in turn receives an associated response, even if from a different node. In these situations, what really differentiates a Request/Reply pattern from a bare one-way loop is the relationship between the request and the reply, which is kept in the ...