Erlang gen_server reloaded: manage server behaviour and metrics in one place
erlang-solutions.com
erlang-solutions.com
It's a little unusual to put that in as a proxy in front of a gen_server, because normally intra-erlang messaging doesn't need those facilities, which are normally handled at the border. But for metrics I can see it.
Composition of actors would allow for "wrapping" the actions of one actor in another and an implementation of RPC within your service itself (separate actors for both requests and responses), but that's not generally a thing you would do directly. Why? Because it's nontrivial, and you'd likely want a framework like theirs to orchestrate it.
Composition of actors in the actor model is done by message proxying, just like this blog post does. The original actor's API is preserved and undergoes no semantic change, just like composition in any other functional concurrency paradigm.
This works in erlang where it wouldn't work in most other languages because actors are very lightweight and message passing is a fast, optimized language primitive.
Having written many hundreds of promises and awaits, and many thousands of actors, I'd have to say that the actor paradigm is far easier to scale and reason about than any promise or async/await implementation. That's partly because almost every other language is pretty terrible at concurrency. But your mileage may vary and everyone has their preferences.