If Alice (sender) sends a private message embedded with public key of the Bob(recipient) through onion network, so in this key exchange, does Bob remains anonymous to Alice as Alice knows about the public key of Bob. So if we want to achieve mutual anonymity, how can we do that? Can we achieve mutual anonymity through this key exchange?
There is a definition problem here. If Alice and Bob are anonymous to each other, to whom is Alice sending her message ? There must be some kind of rendez-vous; otherwise, Alice is just sending her message to "anybody".
In Tor, putative Bob's, i.e. service providers, have a name which is what Alice sees and uses; that name is derived from a public key which Bob generated. Bob also publishes "introduction points" which are randomly chosen Tor relay nodes; Alice will contact Bob through one of these introduction points (and she will also do so through a sequence of relay nodes). From the outside, it can be tracked that a given service exists under some name, and that someone is contacting it, but the identities of both client and server (Alice and Bob) are hidden through the usual mechanism of relay nodes. The cornerstone of the protocol is that the service name is a hash of the public key of Bob; thus, messages from Alice cannot be intercepted (as long as Alice uses the same service name, she knows that only the owner of the corresponding private key will be able to read the messages). This rendez-vous protocol is specified there.
What Tor does not provide is a way for Alice to learn the target service name. This is out of scope of Tor (Tor is not a PKI). Common methods are publication of the service name as a ".onion" URL in a Web page of other mediums.