I am trying to design a replay mechanism that will enable users to replay messages from the queues. The best design I have come up for an exchange that contains multiple queues and multiple consumers is:
Create a recorder service that will:
- Create a queue and bind all routing keys to it.
- Consume all messages from the exchange.
- Save all messages to the DB.
Subscriber request for replay.
- Each subscriber creates a new exchange, queue and binds to it with same bindings as its regular queue.
- Subscriber sends a rest requests to a web server to start replay with a filter ( startdate, etc). Request contains its replay exchange name.
- Web server pulls data from the DB and publishes it to the specific exchange
- refinements can be added like attaching RequestId and echoing it back.

Questions:
1. Does that make sense?
2. Am I inventing the wheel? Is there a rabbit inherent solution? plugin?
3. Does creating multiple exchanges considered a good practice?
In this solutionan exchange for each queue is created in order to publish the same message.
Another solution:
1. Create an additional queue "ReplayQueue" for each queue. set a TTL (let's say a month).
2. Each time a user requests a replay let him replay from its own ReplayQueue without acking.
This solution is a bit problematic because.
- In order to replay last day, consumers will have to fetch all earlier 29 days and filter them out.
- This solution scales up - Queues will get larger (unlike db storage that can scale out).