Messaging Principles

Messages: Events versus Commands

Differences

Aspect Event Command
Contract Producer of event determines & publishes schema Producer of commands has an agreed contract with receiver
Contract testing Consumers test against published schema Subject to a contract which either party (producer & consumer) can test against
Relationship Producer of an event has no knowledge of consumers Producer of a command knows there is one and only one well known consumer
Language and tense Events are verbs in the past tense Commands are verbs in the present tense
Message payload Contains the state that relates to the event, not an entire model or graph Contains all parameters associated with the execution of the command
Dead-letter queue (DLQ) Consumer has a private DLQ in its broker where it may store messages Consumer is able to place the unprocessed command on a DLQ of the publisher’s broker

Similarities

Sequencing
It is a burden upon any consumer to process messages in sequence whenever it has scaled horizontally

Discriminant
It is a burden upon any producer to indicate the message intent of event notification or command invocation through a message header or message name

References

Last updated on 28 Aug 2020