It is easy to find scenarios where our messages need additional information or metadata to do some extra tasks, for example, when you need a correlation ID or a timestamp to track when things were created or tagged. Other frameworks, such as Apache Camel, use an envelope that contains the actual message, some headers, and some attachments. This envelope is called Exchange in the Apache Camel world. Unlike Apache Camel, Akka does not provide an out-of-the-box envelope implementation of this kind. Since actors exchange messages of the type Any (different from null), we can indeed create our own implementation of an envelope, where we can add additional knowledge about the message we are sending around.
In this recipe, we will define our own envelope, which will have capabilities to hold the additional knowledge in a headers map. Also, we will create an actor that will turn any message...