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:
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:
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:
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 ...