The current system of Commands already allows a declarative approach to create exchanges and queues but the commands are tightly tied to the protocol structure. Even though this works fine it is sometime hard to understand the flow of messages from an exchange to queues.
In order to solve this we could create a meta Command that could be used like Queue::of('x')->willReceiveFrom('y')->viaRoutingKey('z'). Essentially this a factory for a set of Commands that already exist.