'Create a new exchange.
Create an exchange of a specific type, and optionally have the
exchange be durable. If an exchange of the requested name already
exists, no action is taken and no exceptions are raised. Durable
exchanges will survive a broker restart, non-durable exchanges will
not.
Exchanges provide behaviors based on their type. The expected
behaviors are those defined in the AMQP 0-10 and prior
specifications including \'direct\', \'topic\', and \'fanout\'
functionality.
:keyword type: The exchange type. Valid values include \'direct\',
\'topic\', and \'fanout\'.
:type type: str
:keyword exchange: The name of the exchange to be created. If no
exchange is specified, then a blank string will be used as the
name.
:type exchange: str
:keyword durable: True if the exchange should be durable, or False
otherwise.
:type durable: bool'

def exchange_declare(self, exchange=u'', type=u'direct', durable=False, **kwargs):

    options = {u'durable': durable}
    try:
        self._broker.addExchange(type, exchange, options)
    except Exception as exc:
        if (OBJECT_ALREADY_EXISTS_STRING not in str(exc)):
            raise exc
