It seems like a mistake to me. The point of publishing a message is that you are decoupled from the component or components receiving the message.
The business logic about whether the message is then fanned out or routed in whatever way is outside the scope of the publishing component.
But there is obviously a connection between the publisher and consumers of the message in that they both know the topic name. ie If you only have a single topic you have to listen for all the messages. So the choice of name is important.
My feeling here is that your colleague is conflating topics and queues. It's good for the component to have its own private queue. This allows it to run without bumping into other components. But topic names need to be public and unchanging so that you can insert components into your overall flow.
So in your case I would have topic 'orange' and queue name 'juicer1' When the juicer component starts up it would create its Unique queue name and route all/some/fanout/round robin 'orange' messages into it. Then start pulling them down from its private queue to be processed.
Complex routing and 'MasterWorkers' in order to achieve the more complex routing you require you will have to program that routing into a component and set it up a bit like this
Worker -> starts up and contacts master worker "I'm ready for work! here is my queue name"
MasterWorker -> remembers the workers queue name
incoming queue -> pulled by MasterWorker
-> do I have any Workers available?
-> does the avaialble worker match business logic x?
-> send the work to the workers queue