class_docstr: This publisher will handle failures and closures and will
  attempt to restart things
  
  delivery confirmations are used to track messages that have
  been sent and if they have been confirmed
docstr: exchange setup by invoking the Exchange.Declare RPC command.
  When complete, the _on_exchange_declareok method will be invoked
  by pika.
  
  :param str|unicode exchange_name: The name of the exchange to declare
docstr_tok: ["exchange","setup","by","invoking","the","Exchange.Declare","RPC","command",".","When","complete",",","the","_on_exchange_declareok","method","will","be","invoked","by","pika",".",":","param","str|unicode","exchange_name",":","The","name","of","the","exchange","to","declare"]
code: def setup_exchange(self, exchange_name):
      """
      exchange setup by invoking the Exchange.Declare RPC command.
      When complete, the _on_exchange_declareok method will be invoked
      by pika.
  
      :param str|unicode exchange_name: The name of the exchange to declare
  
      """
      self._logger.debug("declaring exchange %s", exchange_name)
      with self._rmq_lock:
          self._channel.exchange_declare(
              exchange_name,
              callback=self._on_exchange_declareok,
              exchange_type=self._exchange_type,
              durable=True,
              auto_delete=True,
          )
  
imports: import time
  import threading
  import pika
  from studio.storage.storage_setup import get_storage_verbose_level
  from studio.util import logs
label_desc: Use image node_id 17 for calling the RMQueue obj's underlying member method code with example usage: obj.setup_exchange(exchange_name) without return types