Messages and queues
Commands are messages. This is a way to distinguish the kind of information that describes the actions on an entity, instead of describing the state of an entity. Messages describe the cause and effect of an action over an entity.
Command messages are time-bound, that is, the time in a command is described when a command is issued but not yet executed.
Commands bring arguments necessary to execute the action on the entity.
As data, messages need to be persisted. The point is that a traditional store (such as a database, as we normally refer to them) normally handles entity states, but this is not useful because it would not be optimized to the specific features of the messages:
Messages are useful only if correctly ordered in time; messaging systems handle unordered messages as an issue
Messages should be handled once
Message execution should be idempotent, that is, executing a message twice should not affect the system the second time
Messages should be marked as consumed
These...