"durable" is not really a queue type. That'd be "classic" (v1 or v2), quorum or stream.
So the precision of 50 msgs/s is most likely what leads to spikes "every 15s". I don't think anything in particular happens every 15s inside RabbitMQ,
it's probably just that 50 msgs/s * message size * 15 * 8 (so 6MB or so) is exactly the amount of data that causes something to happen.
Since you don't know the queue type, most likely it's a classic queue v1. Some ideas for debugging:
* check the publisher confirm latency - does it spike as well?
* publish faster/slower to see if the spike frequency changes (that'd confirm that it's not so much "every 15s" as "every 6MB" or "every 6000 messages" or something)
* convert the queues to classic v2 (more performant in general and a different on-disk representation may change this behaviour)
* if you are using mirroring (HA policies) - see if that happens without them
But generally speaking: RabbitMQ 4.0 (which only supports v2 for classic queue) + perhaps local-random-exchange is likely the solution anyway.
Best,