Reclaims queues and exchanges significant performance result
it can be for a very large volume of messages
Re-announces that each of them uses a good approach because it processes queues / exchanges that disappear due to a restart of the broker or an explicit deletion?
"good approach" - no.
"effective" in preventing exchanges / queues / bindings from disappearing due to problems, yes ... but this is not very good, in most cases
(maybe it's normal if you send a message very rarely, there is a real reason for concern about clearing a clean topology)
Should we just announce queues and exchanges once per process and expect them to last a lifetime?
this is my general approach.
it opens up the possibility of destroying topology, and you do not know this. it all depends on whether you think this will really happen.
Should long-term exchanges and queues be declared in the Rabbit configuration and not be declared by applications?
There is nothing wrong with the predefined topology, but it misses a lot of the power and flexibility of rabbitmq and the amqp protocol.
Many messaging systems require predefined topologies and specialized topology management tools. amqp is completely different in that it allows you to define the topology as needed.
if you are dealing with a static topology then this might be a good option for you.
How to change the configuration for queues / exchanges if applications can continue to advertise them with the old configuration? Should applications simply handle ad rejection and continue to publish / consume?
i will cause the application to crash and report it through any error reporting mechanism that you use.
with a change in topology, usually something important is done for some reason. if the exchange or queue announcement is to change, there is probably a good reason for this and the code should not continue the old announcement.