SpringCloud 实战笔记

本文详细介绍了Spring Cloud的相关组件,如Eureka实现服务发现与注册,Consul的服务网格解决方案,Ribbon和Feign的客户端负载均衡,Hystrix的断路器功能,以及Gateway作为API网关的角色。通过实例讲解了各个组件的使用方法和配置,如服务降级、熔断和监控,展示了如何在微服务架构中构建和管理分布式系统。
摘要由CSDN通过智能技术生成
Spring Cloud:提供了构建分布式系统所需的“全家桶”,比如服务发现、服务网关、服务路由、链路追踪等。

Eureka(优瑞噶)

  • 服务治理:可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
  • 服务注册与发现:Eureka采用了CS的设计架构,Eureka Server服务端作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka Client客户端连接到Eureka Server服务端并维持心跳的连接。

Consul(康搜)

  • Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。
  • 它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。

Ribbon(瑞奔)

  • 是一个基于HTTP和CP的客户端负载均衡工具,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

Feign(份呢)=

  • 是一个声明式WebService客户端,旨在使编写Java Http客户端变得更容易。
  • 使用方法是定义一个服务接口然后在上面添加注解,以前是Dao接口上面标准Mapper注解,现在是一个微服务接口上面标注一个Feign注解即。
  • FFeign集成了Ribbon,利用Ribbon维护了Payment的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且一声明式的方法,优雅而简单的实现了服务调用。

Hystrix(嗨撕准课)

  • Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等。
  • Hystrix能保证在一个依赖出问题的情况下,不会导致整个服务失败,避免出现级联故障,以提高分布式系统的弹性。
  • “断路器”本身是一种开发装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

Hystrix三大作用:
①服务降级(Fallback):比如当服务器忙,请稍后再试,不让客户端等待并立刻返回一个友好提示,Fallback,会发生降级的几种情况:程序运行异常、超时、服务熔断触发服务降级。
②服务熔断(Break):类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示。三个步骤先进行服务的降级、进而熔断、恢复调用链路。
③实时的监控:会持续地记录所有通过Hystrix发起的请求执行信息,并以统计报表和图形的形式展示给用户,包括没秒执行多少成功,多少失败等。

Gateway(给特为)

  • 旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
  • 目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
  • 作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被
  • API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

最重要的几个概念:

Route(路由):这是网关的基本构建块,它由一个ID,一个URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。

Predicate(断言):输入类类是一个ServerWebExchange。我们可以使用它来匹配来自HTTP请求的任何内容,例如headers。如果请求与断言相匹配则进行路由。

Filter(过滤器):Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者后对请求进行修改。

总结经验

a. Eureka 服务端作为服务注册中心,需要声明 @EnableEurekaServer
b. 其他的服务作为单独的服务需要注册在Eureka的注册中心,需要声明 @EnableEurekaClient
c. OrderFeign 作为负载均衡器,不需要作为Eureka的客户端,只需要激活Feign @EnableFeignClients
–>只需要在接口上添加 @FeignClient(name=“mcroservice-payment”)//使用Feign,使用哪个微服务
c. Hystrix 作为断路器,不需要作为Eureka的客户端,只需要激活Hystrix @EnableHystrixDashboard
–>在控制类上添加 @DefaultProperties(defaultFallback = “paymentTimeOutFallbackMethod”)
–>然后再接口上添加 @FeignClient(value = “CLOUD-PROVIDER-HYSTRIX-PAYMENT”,fallback = PaymentFallbackService.class)
d. GateWay 作为网关,需要作为Eureka客户端

spring:
  cloud:
	  gateway:
		discovery:
		  locator:
			enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称j进行路由
		routes:
		  - id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
		   #匹配后提供服务的路由地址
			#uri: http://localhost:8001
			uri: lb://MCROSERVICE-PAYMENT
			predicates:
			  - Path=/payment/get/** # 断言,路径相匹配的进行路由
			  #- After=2020-11-20T14:17:43.912+08:00[Asia/Shanghai] #断言在当前时间之后才可以访问
		  - id: payment_route2
			#uri: http://localhost:8001
			uri: lb://MCROSERVICE-PAYMENT
			predicates:
			  Path=/payment/lb/** #断言,路径相匹配的进行路由

或者通过代码实现

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
   
	RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
	routes.route("patn_route_buba",r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();
	return routes.build();
}

Ribbon本地负载均衡与Nginx服务端负载均衡的区别?

  • Nginx是服务器的负载均衡,客户端所有的请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。
  • Ribbon本地负载均衡,在调用服务接口的时候,会在注册中心上获取注册信息服务列表之后缓冲到JVM本地,从而在本地实现RPC远程服务调用技术。

LB负载均衡分为哪两种?

  • 集中式LB,即在服务的消费方和提供方之间是有独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方。
  • 进程内LB,将LB逻辑集成于消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个 合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程。

mcroservice:(总项目名)

cloud-api-commons (子项目存放实体类型)

创建一个实体类和返回数据类型

cloud-provide-payment (服务生产者)
  • POM文件:表示自己是eureka客户端
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • application文件:
eureka:
  client:
	#表示是否将自己注册进eureka  默认为true
	register-with-eureka: true
	#是否从EurekaServer中抓取已有的注册信息,默认为true,单点无所谓,集群必须设置true才能和ribbon使用负载均衡
	fetch-registry: true
	service-url:
		#defaultZone
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值