The RabbitMqIO always declares an exchange if it is configured to read from it. This is problematic with pre-existing exchanges (a relatively common pattern), as there's no provided configuration for the exchange beyond exchange type. (We stumbled on this because RabbitMqIO always declares a non-durable exchange, which fails if the exchange already exists as a durable exchange)
A solution to this would be to allow RabbitMqIO to read from an exchange without declaring it. This pattern is already available for queues via the `queueDeclare` flag. I propose an `exchangeDeclare` flag which preserves existing behavior except for skipping the call to `exchangeDeclare` before binding the queue to the exchange.