Ok, answering myself after testing:
There is only one queue per device. Pushing a downlink message with the “replace” option to the queue clears the whole queue leaving only this message to be downloaded.
Leads me to reformulate my desire:
How about having the option to replace a downlink message of a specific port?!
Is that possible? How? If not, I would really like that.
Imagine you have a node and several configurations and commands you can send to it on different ports. Your device only gives an uplink once per hour. You send a command to port 15 to it (e.g. play buzzer sound after next downlink), 5 minutes later you change some configuration (e.g. set temperature alarm threshold to 30°C) on port 20. But thinking of it, you prefer the threshold to be 33°C 5 more minutes later, change that and QUEUE the downlink. Because if you did choose replace, the first command would be deleted and not sent down to the node. However, now you have the situation that your device will play the buzzer, then (1 hour later) set the threshold to 30°C (which you didn’t like, but you queued it), just to wait 1 more hour to have your favorite setting (33°C) being sent down.
Your application is not fast enough to respond to an uplink and create a downlink to the latest setting, you need the TTN queue.
One solution could be to buffer the downlink queue in your application, modify it there and always push a new queue (first one with the “replace” flag, the other messages appended with the “last” option set) to TTN, which does not seem so elegant.
How about an extra flag:
• replace_for_this_port (replacing all other messages of this port, taking the queue position of the first message of this port)
Is that too specific or do others see value in this, too?