Thank you for your answer.
I've read caveats but i thought it doesn't apply to per-queue TTL. Quote:
"While consumers never see expired messages, only when expired messages reach the head of a queue will they actually be discarded (or dead-lettered). When setting a per-queue TTL this is not a problem, since expired messages are always at the head of the queue."
I will probably use dynamic shovels but still I think that either documentation is not clear or there may be a problem with the way per-queue ttl works.