Hi Sebastian,
you're lucky, I've been reading into this pretty recently for "the other Axon-based gaming platform" ;-). The short response is: looks like we're in good shape.
The longer response:
1. Yes, events are published through AMQP in the same order they are stored in the event store, provided that the entire batch of events is generated by the same Aggregate. An as you are a good CQRS-citizen, they are ;-).
2. Yes, AMQP states that messages should be "returned to their originating queue", but doesn't specify in what order. There is no guarantee about ordering (see point 3). Spring uses "basic.reject" to reject failed messages. You can configure spring to tell it whether or not to requeue messages. Exceptions that have "AmqpRejectAndDontRequeueException" as a cause are never requeued.
3. Correct again, Rabbit *does* guarantee message ordering by replacing failed messages at the head of the queue, even in a case of "basic.reject". If you use a single consumer, you will automatically retry the messages until they pass. Beware of poison messages, though. Also, if prefetchSize > txSize, you could have a batch requeued, and continue processing on the next batch. This may also cause ordering to slightly change.
At one of my projects, I have done some "make it crash and get it back up" tests, and all seems working fine, even under pretty high load. I often have about 2000 robots playing a card game on 4 JVM's on my laptop.
Note that recently, I added support for active/passive failover in AMQP Clusters. That means that 2 clusters that are listening to the same queue will, by default, effectively operate in active passive mode. The first cluster will read messages, the second will attempt to connect to the queue, but fail as long as the first is still connected. Obviously, there is a switch to turn this off.
Hope this helps.
Cheers,
Allard