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.