A few thoughts after reading this:
- you really need to go end-to-end if you want reliability
- the Go APIs and language are really nice for network programming – expected as it is a “Internet” language.
- NATS takes care of a lot of the messy end-to-end issues with network programming (reconnects, buffering packets when disconnected, queuing, etc.) Even if you don’t need a message bus, the network abstractions are useful.