I am trying to understand when Akka is useful, with particular reference to the non-guaranteed nature of message delivery. From the Akka docs:
if you really need it [guaranteed delivery], most often you don't
The thing is, I can think of very few situations where loosing messages is acceptable. The only examples I have so far are:
- applications that service read only requests (because if messages are lost, the client can just retry).
- state is continually published in an idempotent way (dropped messages don't matter because the next one will be delivered shortly).
The first is a request response pattern so not really messaging, and the second again relates to a read only data stream of state, not messages which represent business events that must be acted on.
Furthermore, by claiming that guaranteed delivery is too expensive and always advocating "tell" rather than "ask", their philosophy seems to contradict the event sourcing model (clearly, guaranteed delivery is essential for event sourcing otherwise there is no deterministic view of the world).
So, the question: if you have a situation where ordered, guaranteed delivery is important (customer actions must be ordered per customer and obviously guaranteed) is Akka a good fit? Why not some other system that already has these semantics like a queue of some sort (Kafka, activemq etc)?
The Akka docs suggest that any additional guarantees should be built in on a per application basis. We have something similar at my work place (guaranteed messaging layer built on top of non-guaranteed delivery semantics) but this means that all of the application code interacts with this layer, so I don't see what benefit Akka provides over any other messaging system in this case.
I just find it really hard to believe that people don't care if messages are delivered or not, especially when talking about building credit card transaction processing systems and the like.