Spring Cloud Alibaba入门篇
学习条件
- 了解web三层架构
- 熟练应用SSM架构
- 了解Maven管理工具的使用
- 熟练使用SpringBoot,以及了解SpringBoot基本原理。
- 了解部分术语:应用、工具、耦合、负载等
温馨提示:注意版本问题,不复杂,就是呀呀的版本选不好,Game Over.....
没有从入门开始写,这点应该能入门,装x用的文章,首次编写,有疑问留言(看到也不想回你),没疑问,谢谢惠顾!喜欢就点个赞!!!
什么是微服务?谈谈个人理解....
引文:单体架构是微服务架构出现之前,最经典的软件架构类型,许多早期的项目采用的也都是单体架构。单体架构将应用程序中所有业务逻辑都编写在同一个工程中,最终经过编译、打包,部署在一台服务器上运行。
微:体积小,简单
服务:功能实现。
微服务 = 体量小,复杂程度低的功能实现模块
微服务架构:微服务是一种全新的系统架构设计风格,每个服务只专注于做好一件事(三十六行,行行出状元)“专业的人做专业的事”。简单来说:就是把单体服务,拆了再拆,构建成体量小的模块,每个模块构成一个服务,多个服务的集合就是微服务架构。SpringCloud的诞生,就是来管理这些微小服务之间沟通的(不止于SpringCloud、Dubbo等)。
面试题:见附录
SpringCloud
引文:“工具”指一些列功能的集合体,泛指工作时所需用的器具。
Spring Cloud 被称为构建分布式微服务系统的“全家桶”,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。更有效的实现开发应用管理的“工具”。
Spring Cloud 将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringCloud集成核心功能官网
- Distributed/versioned configuration 分布式/版本化的配置管理
- Service registration and discovery 服务注册与服务发现
- Routing 路由
- Service-to-service calls 端到端的调用
- Load balancing 负载均衡
- Circuit Breakers 断路器
- Global locks 全局锁
- Leadership election and cluster state 选举与集群状态管理
- Distributed messaging 分布式消息
SpringCloud与SprigBoot版本关系见附录(官网)
Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,这套规范共有两代实现。重要转折点
- 第一代实现: Spring Cloud Netflix,
- 第二代实现: Spring Cloud Alibaba
2018 年 12 月12 日,Netflix 公司宣布 Spring Cloud Netflix 系列大部分组件都进入维护模式,不再添加新特性。这严重地限制了 Spring Cloud 的高速发展,于是各大互联网公司和组织开始把目光转向 Spring Cloud 的第二代实现:Spring Cloud Alibaba。
Spring Cloud Alibaba 组件
Spring Cloud Alibaba 包含了多种开发分布式微服务系统的必需组件
- Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。
- Sentinel:阿里巴巴开源产品,把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性。
- RocketMQ:Apache RocketMQ 是一款基于Java 的高性能、高吞吐量的分布式消息和流计算平台。
- Dubbo:Apache Dubbo 是一款高性能的 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Alibaba Cloud OSS:阿里云对象存储服务器(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。
- Alibaba Cloud Schedulerx:阿里中间件团队开发的一款分布式调度产品,支持周期性的任务与固定时间点触发任务。
【学习内容】
Nacos 即 Dynamic Naming and Configuration Service(动态命名与配置服务)。由 Naming 前两个字母,Configuration 前两个字母,以及 Service 首字母组成。
Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理 以及 服务管理平台。
简单的理解:
Nacos 就是 注册中心 + 配置中心。即 Nacos = Eureka + Config + Bus。
学习条件:
为什么要学习注册中心?
微服务架构,就是很多小服务的集合体,对多个服务进行单独管理是比较麻烦。服务之间调用,A调用B,如果B因特殊需要(比如他很开心),想要频繁更换端口或IP地址,那么A服务中的代码怎么办?跟着重复更新....维护比较麻烦。注册中心可以解决这一问题。
注册中心能干什么?
服务注册,服务发现是什么东东?怎么理解?
简单理解,服务提供方把自己的服务名+端口告诉了注册中心,注册中心,统一定义,统一管理。这一过程就是服务注册。反之服务发现,自己能理解吧!不能就百度...
主要功能
服务发现和服务健康监测
动态配置服务
动态DNS服务
服务及其元数据管理
【项目简介】
1. 新建Maven父工程springcloud-alibaba-parent
2. 新建子模块nacos-provider-8000
- 提供Ctroller、Service、Mapper(略,暂定使用集合数据充当DB)
- 提供对外接口,http://ip+端口/URI/entityInfo
3. 新建子模块nacos-consumer_9000
- 提供Ctroller,实现远程调用nacos-provider-8000工程对外提供数据接口
实现远程调用,需要了解Http协议,请求头,请求行,请求体,数据传输方式等(WEB阶段Tomcat、Servlet学习)。
远程调用方式繁多(更多远程操作方式见附录)
为什么要学习并使用远程调?演示远程调用
例如:开发一款名为:智尚专属的APP,需求定时发送你的定位...那么定位系统如何实现?不清楚,但是百度、高德可支持(软件+硬件),此时我们就需要通过远程调用的方式,调用第三方系统暴露的接口实现
新建父工程
- 创建Maven父工程:springcloud-nacose(不使用快捷创建-看个人习惯)
- 父工程:pom依赖如下
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>org.example</groupId>
8 <artifactId>spingcloud-nacos</artifactId>
9 <packaging>pom</packaging>
10 <version>1.0-SNAPSHOT</version>
11 <!-- 引入子模块,子模块新建后IDEA默认自动构建 -->
12 <modules>
13 <module>nacos-provider-8000</module>
14 </modules>
15
16 <!-- 版本管理 -->
17 <properties>
18 <maven.compiler.source>8</maven.compiler.source>
19 <maven.compiler.target>8</maven.compiler.target>
20 <springbootstart.version>2.4.2</springbootstart.version>
21 </properties>
22 <!-- 依赖管理,仅管理,非导入,子模块:按需手动导入相关依赖,可以省略版本version -->
23 <dependencyManagement>
24 <!-- springboot 提供了N个start依赖 ,spring-boot-dependencies可以帮我们统一依赖 -->
25 <dependencies>
26 <dependency>
27 <groupId>org.springframework.boot</groupId>
28 <artifactId>spring-boot-dependencies</artifactId>
29 <version>${springbootstart.version}</version>
30 <type>pom</type>
31 <scope>import</scope>
32 </dependency>
33 <!-- lombok组件-简化POJO开发 -->
34 <dependency>
35 <groupId>org.projectlombok</groupId>
36 <artifactId>lombok</artifactId>
37 <version>1.18.22</version>
38 </dependency>
39 </dependencies>
40 </dependencyManagement>
41 </project>
新建子模块nacos-provider-8000
- 创建子模块:nacos-provider-8000
- nacos-provider-8000子模块:pom依赖如下
1 <properties>
2 <maven.compiler.source>8</maven.compiler.source>
3 <maven.compiler.target>8</maven.compiler.target>
4 </properties>
5 <dependencies>
6 <!-- web依赖,用以可用Sring/MVC相关注解 -->
7 <dependency>
8 <groupId>org.springframework.boot</groupId>
9 <artifactId>spring-boot-starter-web</artifactId>
10 </dependency>
11 <!-- lombok组件模块-便于开发POJO -->
12 <dependency>
13 <groupId>org.projectlombok</groupId>
14 <artifactId>lombok</artifactId>
15 </dependency>
16 </dependencies>
注意事项:
- 父工程pom中需使用<modules>标签指向子模块(IDEA默认新建子模块时自动构建)
- 子模块需使用<parent>标签引入父工程
- src/main/java下新建包:com.nacosprovider
- com.nacosprovider下新建SpringBoot启动类:NacosProviderApp
1 @SpringBootApplication
2 public class NacosProviderApp {
3 public static void main(String[] args) {
4 SpringApplication.run(NacosProviderApp.class);
5 }
6 }
- src/main/resources下新建配置文件:application.properties ,并设置服务端口
1 #当前模nacos-provider-8000块服务端口
2 server.port=8000
3 #当前服务应用上下文路径:项目路径
4 #server.servlet.context-path=/provider
- com.nacosprovider下新建包:entity,并新增实体类EntityInfo
1 @Data
2 public class EntityInfo {
3 private String entityId;
4 private String entityInfo;
5 private String sendTime;
6 }
- com.nacosprovider下新建包:service,并新增EntityInfoService
1 @Service
2 public class EntityInfoService {
3 public EntityInfo queryEntityInfo(String entityId){
4 EntityInfo entityInfo = new EntityInfo();
5 entityInfo.setEntityId(entityId);
6 // return mapper.queryEntityInfo(entityInfo);
7 entityInfo.setSendTime("xxxx年xx月xx日 HH:mm:ss");
8 entityInfo.setEntityInfo("Hello Nacos!");
9 return entityInfo;
10 }
11 }
- com.nacosprovider下新建包:controller,并新增NacosProviderController
1 @RestController
2 @RequestMapping("/provider")
3 public class NacosProviderController {
4
5 @Autowired
6 private EntityInfoService entityInfoService;
7
8 @GetMapping("/entityInfo/{entityId}")
9 public EntityInfo queryEntityInfo(@PathVariable("entityId") String entityId){
10 return entityInfoService.queryEntityInfo(entityId);
11 }
12
13 }
- 启动服务测试访问/postman测试均可:http://localhost:8000/provider/entityInfo/11
实际开发中:服务提供这将编写接口文档(API文档),说明接口调用规则,入参,返参等。
新建子模块:nacos-consumer-9000
- 新建子模块过程、配置文件、启动类、pom依赖(可移除lombok组件)略
新建包com.nacoseconsumer.config,类BeanManagerConfig
1 @Component
2 class BeanManagerConfig {
3 /**
4 * Spring框架提供的RestTemplate类可用于在应用中调用rest服务
5 */
6 @Bean
7 public RestTemplate getRestTemplate(){
8 return new RestTemplate();
9 }
10 }
- 新建包com.nacoseconsumer.controller,类NacosConsumerController
1 @RestController
2 @RequestMapping("/consumer")
3 public class NacosConsumerController {
4 /**
5 * Spring框架提供的RestTemplate类可用于在应用中调用rest服务
6 */
7 @Autowired
8 private RestTemplate restTemplate;
9 /**
10 * @Description 请求第三方远程接口
11 * @param
12 * @return
13 */
14 @GetMapping("/entityInfo/{entityId}")
15 public String queryEntityInfo(@PathVariable("entityId") String entityId){
16 String url = "http://localhost:8000/provider/entityInfo/"+entityId;
17 ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
18 return forEntity.getBody();
19 }
20 }
- 启动服务测试/posman访问:http://localhost:9000/consumer/entityInfo/11
遗留问题(缺点)
- 手动的维护所有的服务访问ip地址列表。
- 单个服务实现负载均衡需要自己搭建(keepalive+Ngix)
使用注册中心能够实现服务治理,服务动态扩容,以及服务调用的负载均衡。
Nacos入门实战
- Nacos 官网(下载、文档、安装、启停服务*附录)
- 父工程新增依赖
1 <!-- SpringCloud依赖 -->
2 <dependency>
3 <groupId>org.springframework.cloud</groupId>
4 <artifactId>spring-cloud-dependencies</artifactId>
5 <version>2020.0.1</version>
6 <type>pom</type>
7 <scope>import</scope>
8 </dependency>
9 <!-- SpringCloudAlibaba依赖 -->
10 <dependency>
11 <groupId>com.alibaba.cloud</groupId>
12 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
13 <version>2021.1</version>
14 <type>pom</type>
15 <scope>import</scope>
16 </dependency> - nacos-provider-8000 新增pom依赖
1 <!-- 基于SpringCloud alibaba提供的针对Nacos的组件:服务注册与发现 -->
2 <dependency>
3 <groupId>com.alibaba.cloud</groupId>
4 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
5 </dependency> - nacos-consumer-9000 新增pom依赖
<!-- 基于SpringCloud alibaba提供的针对Nacos的组件:服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>说明:Spring Cloud LoadBalancer是一个客户端负载均衡器,类似于Ribbon,但是由于Ribbon已经进入维护模式,并且Ribbon 2并不与Ribbon 1相互兼容,所以Spring Cloud全家桶在Spring Cloud Commons项目中,添加了Spring cloud Loadbalancer作为新的负载均衡器,并且做了向前兼容。
Nacos内部已经整合Ribbon(负载均衡器),所以RestTemplate与Nacos整合使用时,管理RestTemplate的bean推荐使用LoadBalancer。
- 优化RestTmplate的bean管理,新增注解
1 @Bean
2 @LoadBalanced
3 public RestTemplate getRestTemplate(){
4 return new RestTemplate();
5 } - 更改Cotroll,使用服务名称实现远程调用(通过注册中的服务名称实现调用,摈弃维护IP、端口)
1 @GetMapping("/entityInfo/{entityId}")
2 public String queryEntityInfo(@PathVariable("entityId") String entityId) {
3 String url = "http://nacos-provider/provider/entityInfo/" + entityId;
4 System.out.println(url);
5 ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
6 return forEntity.getBody();
7 }说明:不使用注解,不使用LoadBalancer,直接改URL的IP为服务提供者的服务名称调用会报错java.net.UnknownHostException: nacos-provider
原因:Nacos内部已经整合Ribbon(负载均衡器),RestTemplate与Nacos整合使用时,需要开启负载均衡,因此管理RestTemplate的bean必须使用注解@LoadBalanced,表示开启负载均衡。否则无法直接通过“服务提供者的服务名”访问。
2.必须使用IP访问肿么办?
可以注入LoadBalancerClient,根据服务名称获取ServiceInstance,再获取IP+PORT即可,此时维护RestTemplate是就无需使用@LoadBalanced。
可以注入DiscoveryClient (服务发现工具类),根据服务名获取列表List<ServiceInstance>(通常服务名唯一,所以列表如果不为null长度也是1).
1 @RestController
2 @RequestMapping("/consumer")
3 public class NacosConsumerController {
4 /**
5 * Spring框架提供的RestTemplate类可用于在应用中调用rest服务
6 */
7 @Autowired
8 private RestTemplate restTemplate;
9 /**
10 * 负载均衡客户端
11 */
12 @Autowired
13 private LoadBalancerClient loadBalancerClient;
14 /**
15 * 服务发现客户端
16 */
17 @Autowired
18 private DiscoveryClient discoveryClient;
19
20 /**
21 * @param
22 * @return
23 * @Description 请求第三方远程接口
24 */
25 @GetMapping("/entityInfo/{entityId}")
26 public String queryEntityInfo(@PathVariable("entityId") String entityId) {
27 String url = "http://nacos-provider/provider/entityInfo/" + entityId;
28
29 // 使用以下方式,则需要干掉restTemplate负载均衡注解,开启负载均衡,Ncose中就只能通过服务名调用服务了
30 // 负载均衡发现服务
31 ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
32 String uri = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort();
33 url = uri + "/provider/entityInfo/" + entityId;
34 // 注册与发现,发现服务客户端获取服务
35 List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("nacos-provider");
36 serviceInstanceList.get(0).getPort();
37 serviceInstanceList.get(0).getHost();
38 serviceInstanceList.get(0).getUri();
39
40 System.out.println(serviceInstanceList.get(0).getUri());
41 ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
42 return forEntity.getBody();
43 }
44 }
附录
Nacos
- 下载
登入Nacos官网,登入GitHub,也可以直接进入GitHub搜索“Nacos”
2. 安装
理论上直接解压即可,只要下对了宝宝!
3.启停
启停分为单机版(入门常规)、集群版(高可用)
windows命令:
1 startup.cmd -m standalone
命令说明:startup.cmd 启动程序,双击或DOS命令均可(双击启动请继续看完)
参数说明:-m 模式模型,standalone 标识-单机模式启动
双击启动文件启动(需手动修改启动文件)
1 原:cluster标识集群模式
2 set MODE="cluster"
3 修改为:standalone标识单机模式
4 set MODE="standalone"
4.基本配置
单体架构VS微服务
不同点 | 微服务架构 | 单体架构 |
---|---|---|
团队规模 | 微服务架构可以将传统模式下的单个应用,拆分为多个独立的服务,每个微服务都可以单独开发、部署和维护。每个服务从设计、开发到维护所需的团队规模小,团队管理成本小。 | 单体架构的应用程序通常需要一个大型团队,围绕一个庞大的应用程序工作,团队管理的成本大。 |
数据存储方式 | 不同的微服务可以使用不同的数据存储方式,例如有的用 Redis,有的使用 MySQL。 | 单一架构的所有模块共享同一个公共数据库,存储方式相对单一。 |
部署方式 | 微服务架构中每个服务都可以独立部署,也可以独立于其他服务进行扩展。如果部署得当,基于微服务的架构可以帮助企业提高应用程序的部署效率。 | 采用单体架构的应用程序的每一次功能更改或 bug 修复都必须对整个应用程序重新进行部署。 |
开发模式 | 在采用微服务架构的应用程序中,不同模块可以使用不同的技术或语言进行开发,开发模式更加灵活。 | 在采用单体架构的应用程序中,所有模块使用的技术和语言必须相同,开发模式受限。 |
故障隔离 | 在微服务架构中,故障被隔离在单个服务中,避免系统的整体崩溃。 | 在单体架构中,当一个组件出现故障时,故障很可能会在进程中蔓延,导致系统全局不可用。 |
项目结构 | 微服务架构将单个应用程序拆分为多个独立的小型服务,每个服务都可以独立的开发、部署和维护,每个服务都能完成一项特定的业务需求。 | 单体架构的应用程序,所有的业务逻辑都集中在同一个工程中。 |
SpringCloud与SprigBoot版本关系
2021.0.x aka Jubilee |
2.6.x |
2020.0.x aka Ilford |
2.4.x, 2.5.x (Starting with 2020.0.3) |
2.2.x, 2.3.x (Starting with SR5) |
|
2.1.x |
|
2.0.x |
|
1.5.x |
|
1.5.x |
SpringCloud 对比 Dubbo
功能 | Dubbo | SpringCloud |
---|---|---|
服务注册中心 | Zookeeper | Eureka(主流)、Consul、zookeeper |
服务调用方式 | RPC基于Dubbo协议 | REST API 基于Http协议 |
服务监控 | Dubbo-Monitor | Spring Boot Admin |
熔断器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | 无 | Spring Cloud Netflix Zuul、Gateway |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth+Zipkin(一般) |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
信息总线 | 无 | Spring Cloud Bus |
Spring Cloud Alibaba入门篇的更多相关文章
- Spring Cloud Alibaba入门实战之nacos(一)
Spring Cloud Alibaba入门实战之nacos(一) 前情介绍 Spring Cloud Alibaba 是阿里巴巴提供的新一代的微服务解决方案,相信会有越来越多采用微服务架构的公司 ...
- 主流微服务一站式解决方案Spring Cloud Alibaba入门看这篇就足够了
学习路线 **本人博客网站 **IT小神 www.itxiaoshen.com 生态概述 架构演进 什么是微服务 https://martinfowler.com/microservices/ Mic ...
- Spring Cloud Alibaba(1)---入门篇
Spring Cloud Alibaba入门篇 有关微服务的一些概念的东西我这里就不再阐述了,因为之前在写Spring Cloud系列的时候都有详细写过. 具体地址: Spring Cloud系列博客 ...
- Spring Cloud Alibaba微服务架构入门最容易理解篇
微服务架构介绍 Spring Cloud Alibaba推荐的微服务生态架构基于分层架构实现如下: 接入层:最外层为LVS+Keepalived,可承受几十万级高并发流量洪峰,然后再通过内层的ngin ...
- Spring Cloud Alibaba | Sentinel: 服务限流基础篇
目录 Spring Cloud Alibaba | Sentinel: 服务限流基础篇 1. 简介 2. 定义资源 2.1 主流框架的默认适配 2.2 抛出异常的方式定义资源 2.3 返回布尔值方式定 ...
- Spring Cloud Alibaba | Sentinel: 服务限流高级篇
目录 Spring Cloud Alibaba | Sentinel: 服务限流高级篇 1. 熔断降级 1.1 降级策略 2. 热点参数限流 2.1 项目依赖 2.2 热点参数规则 3. 系统自适应限 ...
- 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...
- 替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门
提起 Spring Cloud 的限流降级组件,一般首先想到的是 Netflix 的 Hystrix. 不过就在2018年底,Netflix 宣布不再积极开发 Hystrix,该项目将处于维护模式.官 ...
- Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)
目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashboar ...
随机推荐
- Windows10安装PHP7+Apache 2.4
下载下面的文件 httpd-2.4.39-win64-VC15.zip php-7.3.4-Win32-VC15-x64.zip 如果下载失效,从这里下载 https://windows.php.ne ...
- IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
IList和DataSet性能差别 分类: NHibernate/Spring/NetTiers/Castle/Ibatis C# ...
- centos安装服务参考博客,亲测可用
centos 安装nginx参考 日志log报错 nginx -c /etc/nginx/nginx.conf https://blog.csdn.net/weixin_41004350/articl ...
- springboot项目中的日志输出
#修改默认输出级别,trace < debug < info < warn < errorlogging.level.com.lagou=trace#控制台输出logging. ...
- can总线第三讲
一 CAN控制器官方定义:CAN控制器用于将欲收发的信息(报文),转换为符合CAN规范的CAN帧,通过CAN收发器,在CAN-bus上交换信息.举个便于理解的例子:就像您发快递一样,要根据快递公司提 ...
- 四、PCB初始化设置
1.参数设置Setup-Design Parameters 2.显示设置 3.颜色设置(自定义) 4..栅格设置(走线层将25分为5等份)
- css文字颜色渐变的3种实现
在web前端开发过程中,UI设计师经常会设计一些带渐变文字的设计图,在以前我们只能用png的图片来代替文字,今天可以实现使用纯CSS实现渐变文字了.下面就介绍3中实现方式供大家参考! 基础样式: .g ...
- Web 开发中 Blob 与 FileAPI 使用简述
本文节选自 Awesome CheatSheet/DOM CheatSheet,主要是对 DOM 操作中常见的 Blob.File API 相关概念进行简要描述. Web 开发中 Blob 与 Fil ...
- 从八道面试题看JavaScript DOM事件机制
As we all know,事件机制其实很简单,无非冒泡和捕获这两点,笔者不再赘述,网上相关文章一大堆,下面让我们直接看面试题 题目一到七,统一设置css .test2 { height: 50px ...
- Django高级之-缓存
一 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消 ...