SpringCloud介绍
微服务介绍
1.微服务就是将一个应用程序,拆分成多个小模块去分别开发
2.微服务是一种样式,也是一种风格
3.每个模块都是单独运行在一个模块中
4.每个模块都需要相互通信
5.每个模块之间没有依赖性,都是独立部署的
6.可以使用多种不同的语言去开发不同的模块
7.使用Mysql数据库,Redis,ES去储存数据,也可以使用多个Mysql数据库
SpringCloud介绍
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
服务的注册与发现-Eureka
介绍
Eureka:就是帮助我们维护服务之间的信息,方便服务之间的相互调用 Robbin:帮助我们实现服务与服务之间的负载均衡,Robbin属于客户端负载均衡 Feign:可以帮助我们实现面向接口开发,就直接调用其他的服务,简化开发 Fallback:可以帮助我们再去调用Feign去调用另外一个服务,如果出现问题,走服务降级,返回一个错误数据,避免功能因为一个服务问题,全部失效 FallbackFactory:当调用方法报错时,不知道具体的报错信息,可以通过FallbackFactory的方式去实现这个功能
Eureka:安全性 需要导入包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
创建父项目pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--当前工程的坐标-->
<groupId>org.example</groupId>
<artifactId>01-sca</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>01-eureka</module>
<module>01-customer</module>
<module>02-eureka</module>
<module>01-search</module>
</modules>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type><!--假如scope是import,type必须为pom-->
<scope>import</scope><!--引入三方依赖的版本设计-->
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--lombok 依赖,子工程中假如需要lombok,不需要再引入-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope><!--provided 表示此依赖仅在编译阶段有效-->
</dependency>
<!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope><!--test表示只能在test目录下使用此依赖-->
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--第三步: 定义当前工程模块及子工程的的统一编译和运行版本-->
<build><!--项目构建配置,我们基于maven完成项目的编译,测试,打包等操作,
都是基于pom.xml完成这一列的操作,但是编译和打包的配置都是要写到build元素
内的,而具体的编译和打包配置,又需要plugin去实现,plugin元素不是必须的,maven
有默认的plugin配置,常用插件可去本地库进行查看-->
<plugins>
<!--通过maven-compiler-plugin插件设置项目
的统一的jdk编译和运行版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!--假如本地库没有这个版本,这里会出现红色字体错误-->
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Eureka使用
需要导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
再启动类中添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
编写yml文件
详细介绍
RestTemplate:RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android或者第三方服务商都是使用 RestTemplate 请求 restful 服务。
eurekaClient:获取服务信息
注解介绍
@EnableEurekaServer:开启服务
@EnableEurekaClient:开启客户端
@EnableWebSecurity:对服务进行加密
@LoadBalanced:开启负载均衡
@EnableFeignClients:
@FeignClient:注解的包路径,扫描这些包下的所有类,获取被`@FeignClient`注解的接口,生成代理对象。
@EnableCircuitBreaker:使用断路器
@HystrixCommand:Hystrix命令
@HystrixProperty:配置熔断还是隔离
@EnableHystrixDashboard:使Hystrix仪表板
@Component 将当前类未来的对象交给容器管理
@CacheResult:帮助我们缓存当前方法的返回结果配合HystrixCommand使用
@CacheRemove:帮助我们清除一个缓存信息
@CacheKey:指定那个方法参数作为缓存的标识