core-java
core-java copied to clipboard
Handle failed aggregate loading during message delivery
Delivery behavior, when it's impossible to load Aggregate for some reason (a coding mistake, storage issues, etc.), is unclear. It looks like all commands and events that point to corrupted Aggregate
stays in InboxStorage
forever. And re-delivered on each shard delivery iteration.
Steps to reproduce:
- Throw an exception in the
@Apply
method of the aggregate. - Send
FirstCommand
to the aggregate and emit the event that will lead to the exception. - Send
SecondCommand
to the aggregate and emit the event that will lead to the exception. - Send one more command with the same
ShardIndex
to another entity.
What happens:
- Aggregate failed to apply the event and threw an exception;
- Diagnostic event
CannotDispatchDuplicateCommand
thrown forSecondCommand
.
What I expect:
- Aggregate failed to apply the event and threw an exception;
- ~~Diagnostic event
CannotDispatchDuplicateCommand
thrown forSecondCommand
;~~ - Another entity successfully handles the command.