we should have three `SpoutMsg` object to represents the three message types: `fail`, `ack`, `next` commands(rather than just use a single one) -- these messages can come concurrently.