When two applications need to exchange data, then they accomplish it by creating a message. A Message Channel is responsible for transmission, it can’t transmit data in raw format. It can only transmit data wrapped in a message.
Message Intent
Our messages are ultimately just bundles of different types of data, but the message sender can have different expectations on what it desires the recipient to do with the message. We may wish the receiver to invoke a function or method, in these situations, it will send a Command Message. The sender is telling the receiver what code to run.
However, if the sender needs to transmit one of its data structures to the receiver, it can send a Document Message. In this scenario, the sender is passing the data to the receiver, but not specifying what the receiver should necessarily do with it.
Or, in some situations we simply want to send a notification, in this case, we can send an Event Message, notifying the receiver of a change in the sender. The sender is not telling the receiver how to react, just providing notification.