Overview
Currently Metafora statemachine commands are like UNIX signals, they can be ignored by user code entirely.
It would be preferable for commands to persist until user code at least acknowledges their receipt.
Details
The current statemachine.Command interface only has a Receive() method. Once a Command is received, it is forgotten. If user code exits before receiving the command or an unexpected shutdown occurs, the command will have never been seen by user code.
Implementation
- Make
Receive() *statemachine.Message become Receive() statemachine.Command
- Create interface:
type Command interface {
Message() Message
Ack()
}
Where until Ack() is called, subsequent calls to Receive() should return the same Command