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: physical network issues and logical protocol abuses can
  result in a closure of the channel.
  
  :param pika.channel.Channel channel: The closed channel
  :param int reply_code: The numeric reason the channel was closed
  :param Exception reason: why the channel was closed
docstr_tok: ["physical","network","issues","and","logical","protocol","abuses","can","result","in","a","closure","of","the","channel",".",":","param","pika.channel.Channel","channel",":","The","closed","channel",":","param","int","reply_code",":","The","numeric","reason","the","channel","was","closed",":","param","Exception","reason",":","why","the","channel","was","closed"]
code: def _on_channel_closed(self, channel, reason):
      """
      physical network issues and logical protocol abuses can
      result in a closure of the channel.
  
      :param pika.channel.Channel channel: The closed channel
      :param int reply_code: The numeric reason the channel was closed
      :param Exception reason: why the channel was closed
  
      """
      _ = channel
      self._logger.info("channel closed %s", repr(reason))
      with self._rmq_lock:
          if not self._stopping and self._connection_is_valid():
              self._connection.close()
  
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 16 for calling the RMQueue obj's underlying member method code with example usage: obj._on_channel_closed(channel, reason) without return types