Most concurrency models work if you understand both your problem domain and your tools thoroughly, and fail if you don't. Event-driven callback spaghetti, for all of its flaws, has been used successfully in services with billions of simultaneous users.
OP was asking for ways to broaden his concurrency knowledge, and studying message-passing, transactional models, promises, etc. will certainly do that.
Why are you advising him to run before he can crawl? All of those paradigms are built on top of the 70's era threading-model as used by the JVM (as well as every other language, behind the scenes).
How can you understand these tools thoroughly if you don't understand the foundation that they're built on?
Yes, they probably have been used in services with billions of users, but I guarantee those engineers understood the basics of threading just as well, if not better, than the tools built on top of them.
OP was asking for ways to broaden his concurrency knowledge, and studying message-passing, transactional models, promises, etc. will certainly do that.