java springcloud讲解

近期对springcloud进行了一个小案例的学习。效果图如下:

项目结构是前后端分离,前端使用的是layui框架,后端使用的是Spring Cloud 它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路

由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括 

Netflflix
Eureka :注册中心
Zuul :服务网关
Ribbon :负载均衡
Feign :服务调用
Hystrix :熔断器
 
其中项目搭建的时候需要注意导包和注解的使用,相信各位在晚上都能找到对应的demo。
 
这里我就讲一下这些组件的概念和作用
 
 

Eureka:注册中心

简单说一下我自己的理解:什么要使用Eureka ?因为微服务就是把许多模块拆分,各司其职,但不免有些业务各各服务间需要相互访问,

如果没有Eureka,访问起来写的代码非常麻烦不好维护,有了Eureka后代码简洁易懂,好维护。

Eureka 就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉
Eureka ,然后 Eureka 会把符合你需求的服务告诉你。
同时,服务提供方与 Eureka 之间通过 心跳 机制进行监控,当某个服务提供方出现问题, Eureka 自然会把它从服
务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。
 
 
配置好后访问: http://localhost:10866/  10866是配置文件里自定义的port  ,图片中红色框里面是已注册的服务信息。
 
 
 
负载均衡 Ribbon
 
但是实际环境中,我们往往会开启很多个 user-service 的集群。此时我们获取的服务列表中就会有多个,到底该访
问哪一个呢?
一般这种情况下我们就需要编写负载均衡算法,在多个实例列表中进行选择。
 
Ribbon 默认的负载均衡策略是简单的轮询,
 
SpringBoot 也帮我们提供了修改负载均衡规则的配置入口:
 
user-service :
   ribbon :
     NFLoadBalancerRuleClassName : com.netflix.loadbalancer.RandomRule
 
格式是: { 服务名称 }.ribbon.NFLoadBalancerRuleClassName ,值就是 IRule 的实现类。
配置后发现结果变成了随机

Hystrix:熔断器

 
Hystix Netflflix 开源的一个延迟和容错库,用于隔离访问远程服务,防止出现级联失败。
 
微服务 I 发生异常,请求阻塞,用户请求就不会得到响应,则 tomcat 的这个线程不会释放,于是越来越多的
用户请求到来,越来越多的线程会阻塞
 
服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成
雪崩效应。
 
这就好比,一个汽车生产线,生产不同的汽车,需要使用不同的零件,如果某个零件因为种种原因无法使用,那么
就会造成整台车无法装配,陷入等待零件的状态,直到零件到位,才能继续组装。 此时如果有很多个车型都需要这
个零件,那么整个工厂都将陷入等待的状态,导致所有生产都陷入瘫痪。一个零件的波及范围不断扩大
Hystrix 解决雪崩问题的手段,主要包括:
 
线程隔离
 
服务降级
 
解读:
 
Hystrix 为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加
速失败判定时间。
用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超
时,则会进行降级处理,什么是服务降级?
 
服务降级:可以优先保证核心服务。
用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回
友好的提示信息) 。 服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它
服务没有响应。 触发 Hystrix 服务降级的情况:
 
线程池已满
 
请求超时
 
服务降级:及时返回服务调用失败的结果,让线程不因为等待服务而阻塞
要注意;因为熔断的降级逻辑方法必须跟正常逻辑方法保证:相同的参数列表和返回值声明。
失败逻辑中返回 User 对象没有太大意义,一般会返回友好提示。所以把 queryById 的方法改造为返回 String
反正也是 Json 数据。这样失败逻辑中返回一个错误说明,会比较方便。
 
在服务熔断中,使用的熔断器,也叫断路器,其英文单词为: Circuit Breaker 熔断机制与家里使用的电路熔断原理
类似;当如果电路发生短路的时候能立刻熔断电路,避免发生灾难。在分布式系统中应用服务熔断后;服务调用方
可以自己进行判断哪些服务反应慢或存在大量超时,可以针对这些服务进行主动熔断,防止整个系统被拖垮。
Hystrix 的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后,可以自动重连。通过断路的方式,将后续
请求直接拒绝,一段时间(默认 5 秒)之后允许部分请求通过,如果调用成功则回到断路器关闭状态,否则继续打
开,拒绝请求的服务。
 
状态机有 3 个状态:
Closed :关闭状态(断路器关闭),所有请求都正常访问。
Open :打开状态(断路器打开),所有请求都会被降级。 Hystrix 会对请求情况计数,当一定时间内失败请求
百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是 50% ,请求次数最少不低于 20
次。
Half Open :半开状态,不是永久的,断路器打开后会进入休眠时间(默认是 5S )。随后断路器会自动进入半
开状态。此时会释放部分请求通过,若这些请求都是健康的,则会关闭断路器,否则继续保持打开,再次进
行休眠计时

Feign:服务调用

Feign 可以把 Rest 的请求进行隐藏,伪装成类似 SpringMVC Controller 一样。你不用再自己拼接 url ,拼接参数等
等操作,一切都交给 Feign 去做。

 

如:

@ FeignClient ( "user-service" )
public interface UserClient {
 
 
   @ GetMapping ( "/user/{id}" )
   User queryById ( @ PathVariable ( "id" ) Long id );
 
}
 
 
@RestController
@RequestMapping ( "/cf" )
public class ConsumerFeignController {
 
@Autowired
private UserClient userClient ;
 
     @GetMapping ( "/{id}" )
     public User queryById ( @PathVariable Long id ){
          return userClient . queryById ( id );
    }
}
 
 
至此:springcloud 主要的一些内容讲完,如有遗漏欢迎指出。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值