Spring Cloud Netflix架构浅析(小结)

最近接触微服务这块的东西,对这方面有了一些了解,拿出来和大家分享一下。

1. 微服务框架Spring Boot+Spring Cloud 

Spring Cloud是基于Spring Boot的一整套实现微服务的框架,可以说,Spring Boot作为框架,Spring Cloud作为微服务,一起构成了一种不可忽视的、新生的框架体系。它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件,方便易用。Spring Cloud包含了非常多的子框架,其中,Spring Cloud Netflix是其中一套框架,它主要提供的模块包括:服务发现、断路器和监控、智能路由、客户端负载均衡等。

特性

  1. Eureka实例可以注册和发现使用spring管理的bean
  2. 嵌入式Eureka服务器可以用声明式的Java配置创建
  3. Hystrix客户端可以用简单的注解驱动
  4. Java配置可以启用嵌入的Hystrix指示面板
  5. 客户端负载均衡

2.  Spring Cloud Netflix组件以及部署

(1)Eureka,服务注册和发现,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。

(2)Zuul,网关,所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。

(3)Ribbon,即负载均衡,Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。

(4)Feign,服务客户端,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。

(5)Hystrix,监控和断路器。我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。

(6)Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。

(7)Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。

3. Spring Cloud Netflix组件开发

可以参考其中文文档:https://springcloud.cc/spring-cloud-netflix.html

(1)服务注册与监控中心:

@SpringBootApplication
@EnableEurekaServer
@EnableHystrixDashboard
public class ApplicationRegistry {
 public static void main(String[] args) {
  new SpringApplicationBuilder(Application.class).web(true).run(args);
 }
}

这里使用spring boot标签的 @SpringBootApplication 说明当前的应用是一个spring boot应用。这样我就可以直接用main函数在IDE里面启动这个应用,也可以打包后用命令行启动。当然也可以把打包的war包用tomcat之类的服务器启动。 使用标签 @EnableEurekaServer ,就能在启动过程中启动Eureka服务注册中心的组件。它会监听一个端口,默认是8761,来接收服务注册。并提供一个web页面,打开以后,可以看到注册的服务。 添加 @EnableHystrixDashboard 就会提供一个监控的页面,我们可以在上面输入要监控的服务的地址,就可以查看启用了Hystrix监控的接口的调用情况。 当然,为了使用上面的组件,我们需要在maven的POM文件里添加相应的依赖,比如使用 spring-boot-starter-parent ,依赖 spring-cloud-starter-eureka-server 和 spring-cloud-starter-hystrix-dashboard 等。

(2)服务间调用:

两种方式可以进行服务调用,RestTemplate和FeignClient。不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。因为Spring MVC的RestController定义的接口,返回的数据都是通过jackson序列化成json数据。

第一种:RestTemplate,只需要定义一个RestTemplate的Bean,设置成 LoadBalanced 即可:

@Configuration
public class SomeCloudConfiguration {
 @LoadBalanced
 @Bean
 RestTemplate restTemplate() {
  return new RestTemplate();
 }
}

这样我们就可以在需要用的地方注入这个bean使用:

public class SomeServiceClass {
 @Autowired
 private RestTemplate restTemplate;
 public String getUserById(Long userId) {
  UserDTO results = restTemplate.getForObject("http://users/getUserDetail/" + userId, UserDTO.class);
  return results;
 }
}

其中, users 是服务ID,Ribbon会从服务实例列表获得这个服务的一个实例,发送请求,并获得结果。对象 UserDTO 需要序列号,它的反序列号会自动完成。

第二种:FeignClient

@FeignClient(value = "users", path = "/users")
public interface UserCompositeService {
 @RequestMapping(value = "/getUserDetail/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
 UserDTO getUserById(@PathVariable Long id);
}

我们只需要使用 @FeignClient 定义一个借口,Spring Cloud Feign会帮我们生成一个它的实现,从相应的users服务获取数据。 其中, @FeignClient(value = "users", path = "/users/getUserDetail") 里面的value是服务ID,path是这一组接口的path前缀。 在下面的方法定义里,就好像设置Spring MVC的接口一样,对于这个方法,它对应的URL是 /users/getUserDetail/{id} 。 然后,在使用它的时候,就像注入一个一般的服务一样注入后使用即可:

public class SomeOtherServiceClass {
 @Autowired
 private UserCompositeService userService;
 public void doSomething() {
  // .....
  UserDTO results = userService.getUserById(userId);
  // other operation...
 }
}

(3)断路器:

//断路器:为了解决当某个方法调用失败的时候,调用后备方法来替代失败的方法,已达到容错/阻止级联错误的功能
//fallbackMethod指定后备方法
@HystrixCommand(fallbackMethod = "doStudentFallback")
@RequestMapping(value = "dostudent",method = RequestMethod.GET)
public String doStudent(){
 return "your name:secret,your age:secret!";
}

public String doStudentFallback(){
 return "your name:FEIFEI,your age:26!";
}

其中,使用@EnableCircuitBreaker来启用断路器支持,Spring Cloud提供了一个控制台来监控断路器的运行情况,通过@EnableHystrixDashboard注解开启。

以上是简单的一些对Spring Cloud Netflix组件的介绍。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Cloud Netflix架构浅析(小结)

    最近接触微服务这块的东西,对这方面有了一些了解,拿出来和大家分享一下. 1. 微服务框架Spring Boot+Spring Cloud  Spring Cloud是基于Spring Boot的一整套实现微服务的框架,可以说,Spring Boot作为框架,Spring Cloud作为微服务,一起构成了一种不可忽视的.新生的框架体系.它提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等组件,方便易用.Spring Cloud

  • 详解Spring Cloud Netflix Zuul中的速率限制

    Spring Cloud Netflix Zuul是一个包含Netflix Zuul的 开源网关.它为Spring Boot应用程序添加了一些特定功能.不幸的是,开箱即用不提供速率限制. 除了Spring Cloud Netflix Zuul依赖项之外,我们还需要将Spring Cloud Zuul RateLimit 添加到我们的应用程序的pom.xml中: <dependency> <groupId>org.springframework.cloud</groupId&g

  • Spring Cloud 2020.0.0正式发布再见了Netflix

    ✍前言 你好,我是YourBatman. 北京时间2020-12-22深夜,Spring Cloud 2020.0.0版本正式发布.2020.0.0是第一个使用新版本方案的Spring Cloud发行版本. 关于版本号这里啰嗦几句:在这之前,Spring Cloud的Release Train名称采用的是伦敦地铁站命名方式,如:Hoxton.Greenwich等. 说明:2020.0.0版本又名Ilford(地铁站名),因为此项目3月后才按照新规更名,估计是为了团队内沟通方便吧,你也可以理解为它

  • 最简单的Spring Cloud教程第一篇:服务的注册与发现(Eureka)

    前言 本文主要给大家介绍关于Spring Cloud服务注册与发现(Eureka)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境简单,可以在开发人员的电脑上跑.另外说明spring cloud是基于springboot的,所以需要开发中对springboot有一定

  • Spring Cloud与分布式系统简析

    本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义. 背景 2008年以后,国内互联网行业飞速发展,我们对软件系统的需求已经不再是过去"能用就行"这种很low的档次了,像抢红包.双十一这样的活动不断逼迫我们去突破软件系统的性能上限,传统的IT企业"能用就行"的开发思想已经不能满足互联网高并发.大流量的性能要求.系统架构走向分布式已经是服务器开发领域解决该问题唯一的出路,然而分布式系统由于天生的复杂度,并

  • Spring Cloud中各组件超时总结

    前言 Spring Cloud是基于Spring Boot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等组件.最重要的是,跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便. Spring Cloud包含了非常多的子框架,其中,Spring Cloud Netflix是其中一套框架,由Netflix开发后来又并入Spring Cloud大家庭,它主要提供的模块包

  • SpringCloud之服务注册与发现Spring Cloud Eureka实例代码

    一.Spring Cloud简介 Spring Cloud是一个基千SpringBoot实现的微服务架构开发 工具.它为微服务架构中涉及的 配置管理.服务治理. 断路器. 智能路由.微代理. 控制总线. 全局锁. 决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品,还可能会新增),如下所述. Spring Cloud Config: 配置管理工具.Spring Cloud Netflix: 核心组件

  • 微服务搭建集成Spring Cloud Turbine详解

    1.概述 本文中,我将向你介绍Spring Cloud Netflix Turbine.它将多个Hystrix Metrics Streams 聚合为一个,以便显示在一个仪表板视图中. 简要介绍Hystrix . 在微服务架构中,我们有许多小应用程序相互通信以完成请求.这些下游服务有可能无法正确响应或完全失败.为了防止发生级联故障,我们为微服务设置了Hystrix回退机制. 每个实现Hystrix的微服务都可以选择公开Hystrix Metrics Streams(通过actuator端点/hy

  • spring cloud 使用Eureka 进行服务治理方法

    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能. 本文通过简单的小例子来分享下如何通过Eureka进行服务治理: 搭建服务注册中心 注册服务提供者 服务发现和消费 ==========我是华丽的分割线======================== 一.搭建服务注册中心 先列出完整目录结构: 搭建过程如下

  • Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 代码实践

    基于 spring-boot-starter-parent 2.1.9.RELEASE, spring-cloud-openfeign 2.1.3.RELEASE 引子 Feign 是一个声明式.模板化的HTTP客户端,简化了系统发起Http请求.创建它时,只需要创建一个接口,然后加上FeignClient注解,使用它时,就像调用本地方法一样,作为开发者的我们完全感知不到这是在调用远程的方法,也感知不到背后发起了HTTP请求: /** * @author axin * @suammry xx 客

随机推荐