code: def open_channel(connection, prefetch = nil)
        res = AMQP::Channel.new(connection) do |channel, open_ok|
          channel.auto_recovery = true
          channel.prefetch(prefetch) if prefetch
  
          channel.on_error do |ch, error|
            log.error("Channel error #{error.reply_text.inspect}, recovering")
  
            # Raise erroneous channel calls/conditions
            # rather than endlessly retrying
            if (403..406).include?(error.reply_code)
              raise(MessagingError, "Channel exception: #{error.reply_text.inspect}")
            end
          end
  
          log.debug("Channel #{channel.id} created")
        end
  
        register_channel(res)
      end
docs: Open an AMQP::Channel with auto-recovery and error handling.
  
   @param connection [AMQP::Connection]
   @param prefetch [Integer, nil]
   @return [AMQP::Channel]
   @api public