
To give you a hard start, we begin with the topology of an rpc request. This looks basically as the following:

The yellow blocks mark the caller of the microservice.
The blue block marks the receiver of the request. The microservice.
The pink block marks the business/processing logic in the bank account microservice for this request.
The flow is the following: A caller - this can be a client application or another service - sends the payload to a transient rpc queue. The consumer (microservice) bound to this queue receives/consumes the request payload. After having received the payload the microservice does the processing/business logic stuff and as a result prepares an output. This output is sent - via a "non-visible" exchange to a pseudo queue. Behind this pseudo queue the client application consumes the produces output.
​
Remarks: "Virtual.request.exchange" and "Virtual.reply.exchange" are just to illustrate. Under RabbitMq you will not need it for rpc. "Pseudo.rpc.response.queue" is in case of an Amqp specification a temporary response queue. But as written in RabbitMqs "direct-reply-queue" implementation this queue is not needed.