在疯狂学习的路上,学到发光(头顶发光)
理论知识:
- 集群:一台服务器无法负荷高并发的数据访问量,那么就设置十台服务器一起分担压力,十台不行就设置一百台(物理层面)。很多人干同一件事情,来分摊压力。
- 分布式:将一个复杂问题拆分成若干个简单的小问题,将一个大型的项目架构拆分成若干个微服务来协同完成。(软件设计层面)。将一个庞大的工作拆分成若干个小步骤,分别由不同的人完成这些小步骤,最终将所有的结果进行整合实现大的需求。
- 服务治理的核心又三部分组成:服务提供者、服务消费者、注册中心。
- 在分布式系统架构中,每个微服务在启动时,将自己的信息存储在注册中心,叫做服务注册服务消费者从注册中心获取服务提供者的网络信息,通过该信息调用服务,叫做服务发现。
- Spring Cloud 的服务治理使用Eureka来实现,Eureka是Netflix开源的基于REST的服务治理解决方案,Spring Cloud集成了Eureka,提供服务注册和服务发现的功能,可以和基于Spring Boot搭建的微服务应用轻松完成整合,开箱即用,Spring Cloud Eureka。
学习记录
- Spring Cloud只需要在Spring Boot的基础上加入以下依赖即可,一个project下有多个module,一个module就是一个服务
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 加入以下依赖,让改服务成为注册中心
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
application.yml配置
server:
port: 8761 #当前 Eureka Server 服务端⼝
eureka:
client:
register-with-eureka: false #是否将当前的 Eureka Server 服务作为客户端进⾏注册
fetch-registry: false #是否获取其他 Eureka Server 服务的数据
service-url:
defaultZone: http://localhost:8761/eureka/ #注册中心的访问地址
在启动类上使用@EnableEurekaServer 注解:声明该类是一个 Eureka Server 微服务,提供服务注册和服务发现功能,即注册中心
- 服务与服务之间的接口调用使用RestTemplate,在启动类上添加方法,并把方法加入到ioc容器中
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
RestTemplate的使用方法
@Autowired
private RestTemplate restTemplate;
/** GET请求 第一个参数是要调用的服务的地址,第二个参数是返回值类型 */
restTemplate.getForEntity("http://localhost:8010/student/findAll",ArrayList.class).getBody();
restTemplate.getForObject("http://localhost:8010/student/findAll",ArrayList.class);
/** POST请求 第二个参数是请求传入的对象,第三个参数是返回类型*/
restTemplate.postForEntity("http://localhost:8010/student/save",student,null) .getBody();
restTemplate.postForObject("http://localhost:8010/student/save",student,null) ;
/** PUt请求 */
restTemplate.put("http://localhost:8010/student/update",student);
/** DELETE请求 */
restTemplate.delete("http://localhost:8010/student/deleteById/{id}",id);
- 服务网关 zuul
Zuul是Netflix提供的一个开源的API网关服务器,是客户端和网站后端所有请求的中间层,对外开放一个API,将所有请求导入统一的入口,屏蔽了服务端的具体实现逻辑,Zuul可以实现反向代理的功能,在网关内部实现动态路由、身份认证、IP过滤、数据监控等。
application.yml对zuul的配置,其中provider是指在注册中心中注册的服务的名称,后面是要访问的统一入口
zuul:
routes:
provider: /p/**
要使其成为zuul网关,需要在其启动类上添加**@EnableZuulProxy** @EnableAutoConfiguration两个注解,不需要@SpringBootApplication注解了。Zuul 还带了负载均衡功能
- Ribbon负载均衡
Spring Cloud Ribbon是一个负载均衡解决方案,Ribbon是Netflix发布的负载均衡器,Spring CloudRibbon是基于Netflix Ribbon实现的,是一个用于对HTTP请求进行控制的负载均衡客户端。
只需要在启动类的restTemple方法上加入@loadBalanced注解即可
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}