微服务对开发进行了简化,通过将复杂系统切分为若干个微服务来分解和降低复杂度,使得这些微服务易于被小型的开发团队所理解和维护。但是,复杂度并非从此消失。微服务拆分之后,单个微服务的复杂度大幅降低,但是由于系统被从一个单体拆分为几十甚至更多的微服务, 就带来了另外一个复杂度:微服务的连接、管理和监控。
spring cloud 基于springboot,为我们提供配置管理,服务发现,断路器,代理服务等我们在做分布式开发常用的问题的解决方案。
1.配置管理
springcloud 提供Config Server ,它在分布式系统开发中外部配置的功能,通过Config Server ,我们可以集中存储所有应用的配置文件。
spring Cloud 提供注解@EnableConfigServer 来启用配置服务。
2.服务发现
springcloud 通过Netflix OSS 的Eureka来实现服务发现,服务发现的主要目的是为了让每个服务之间可以相互通讯。Eureka Server为微服务注册中心。
springcloud使用注解提供Eureka服务端(@EnableEurekaServer) 和客户端(@EnableEurekaClient)。
Eureka服务端(@EnableEurekaServer)
在main函数
@SpringBootApplication
@EnableEurekaServer
@EnableZuulProxy
public class DemoserviceApplication {
public static void main(String[] args) {
SpringApplication.run(DemoserviceApplication.class, args);
}
}
在配置
![](/qrcode.jpg)
server.port=8001
spring.application.name=apirouteservice
eureka.client.serviceUrl.defaultZone=http://localhost:8801/eureka/
客户端(@EnableEurekaClient)
@RestController
@EnableEurekaClient
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
在配置
server.port=8088
eureka.client.serviceUrl.defaultZone=http://localhost:8801/eureka/
3.路由网关
路由网关是主要目的是为了让所有的微服务对外只有一个接口,即可由网关将我们的请求代理到不同的范围中。
springcloud是通过zuul来实现的,支持自动路由映射到Eureka Server上注册的服务。springCloud提供注解@EnableZuulProxy来启用路由代理。
4.负载均衡
springcloud提供了Ribbon 和Feign作为客户端的负载均衡,在Spring Cloud 下,使用Ribbon直接注入一个RestTemplate对象即可,此RestTemplate已做好负载均衡的配置,而即用Feign只需定义注解,有@Feign注解的接口,热后使用@Requestmapping 注解在方法上映射远程的Rest服务。
5.断路器(Cricuit Breaker)
主要是为了解决当某个方法调用失败的时候,调用后备方法来替代失败的方法,已达到容错,阻止级联错误等功能
springcloud使用@EnableCricuitBreaker 来启用断路器支持,使用@HystrixCommand的fallbackMethod来指定后备方法。
springcloud 还给我们提供了一个控制台来监控断路器的运行情况,通过@EnableHystrixDashboard注解开启。