When messages 'disappear' in RabbitMQ the problem is usually down to the bindings. So, to get your example working I did the following:
Created 2 queues, alive, dead (with the TTL and DLX)
Created an exchange called immediate of type DIRECT
Created a binding between the exchange "immediate" and the queue "alive" with a routing key "dead" - the reason for this is because, the routing key for messages into the dead queue (if using the default exchange is 'dead' this needs to match in the binding on the dead letter exchange).
The important part here is in the binding between the immediate exchange and the alive queue.
To test I published a message into the dead queue, I can see it appear in the dead queue briefly then appear in the alive queue.