springcloud-netflix搭建概要梳理(二)

一、Hystrix熔断器
背景:为了避免服务间的雪崩效应,避免当服务之间调用的链路上某个微服务不可用或者响应时间太长时,会导致连锁故障,当失败的调用到一定阈值(缺省是5秒内20次调用失败) 就会启动熔断机制。熔断机制的注解是 @HystrixCommand,方法注解。
Ribbon + RestTemplate应用配置:
1、pring-cloud-starter-netflix-hystrix依赖引入,这个是被调用方处理熔断,Feign是调用方配置,类似代理。
2、被调用方法上面打上注解并指明熔断后调用接口,@HystrixCommand(fallbackMethod = "getFallback")。在方法下面直接编写getFallback方法。//当get方法出现异常时,则会调用此方法. 注意此方法的返回值,参数列表与原方法一致,它的触发我们可以在真正被调用方法抛出一个异常即可。我们可以在返回的结果参数里面注明标识发生了熔断。
3、启动类上@EnableHystrix //开启 Hystrix 熔断机制的支持。
Feign应用配置:
1、Feign客户端中是自带熔断机制的,如果我们想要结合feign使用熔断机制,首先Feign消费者(客户端)进行服务熔断,需要在配置文件中开启,# 需要开启 hystrix.feign.hystrix.enabled: true。
2、找到我们的FeignService上面的@FeignClient(value = "MICROSERVICE-PRODUCT")后面配置@FeignClient(value = "MICROSERVICE-PRODUCT", fallback =ProductClientServiceFallBack.class)指定Feign熔断处理类。
3、创建ProductClientServiceFallBack类,并实现FeignService,在实现类上@Component注解将其注入容器中。直接实现FeignService的接口方法,对于需要指定熔断实现fallback的直接在实现方法重写即可,相当于把上面Ribbon + RestTemplate应用配置中单独写的fallback方法实现原样搞到此实现类中直接重写,内容与之前一样直接写一个同样入参、出参的方法。对于不做熔断的直接不用管其方法实现采用默认return null或者return false等默认实现即可。

二、Hystrix Dashboard监控平台搭建
1、新建项目,依赖中引入spring-cloud-starter-netflix-hystrix以及spring-cloud-starter-netflix-hystrix-dashboard
2、application.yml文件中配置服务端口9001
3、启动类上@EnableHystrixDashboard //开启服务监控
4、启动服务后,访问http://localhost:9001/hystrix网址,可以看到一个豪猪的网页,到此搭建完毕。
5、但是想要监控除了搭建一个监控服务之外还需要被监控的服务配置开启服务监控才能实现真正的监控,找个product服务,依赖pom文件中加入spring-boot-starter-actuator以及spring-cloud-starter-netflix-hystrix
6、 在需要被监控的服务 application.yml 配制中添加暴露端点# 在被监控服务上添加暴露端点
management:
    endpoints:
        web:
            exposure:
                include: hystrix.stream

7、然后访问举例url:http://localhost:8001/product/get/1,访问http://localhost:8001/actuator/hystrix.stream。发现每间隔2s打印一次访问,这个不是图形化界面,之后我们访问 http://localhost:9001/hystrix
在弹出页面上第一个配置监控的url:http://localhost:8001/actuator/hystrix.stream  下面是间隔跟自定义名称。最后点击Monitor Stream,发现进入后loading状态,然后,多访问几次http://localhost:8001/product/get/1。里面观看时候主要包括  7 色:成功、熔断、请求错误、超时、线程池拒绝数、失败异常数、近10s错误百分比   1圈:颜色变化标识建康程度,大小越大表示流量越大  1 线:近2分钟内变化

三、Zuul 路由网关:
重要:Zuul 包含了对请求路由和校验过滤,Zuul 和 Eureka 进行整合,将 Zuul 自身注册为 Eureka 服务治理中的服务,同时从 Eureka 中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
1、新建zuul项目,引入依赖spring-cloud-starter-netflix-zuul
2、配置application.yml文件,注册到eureka中;创建启动类,启动类上@EnableZuulProxy //开启zuul的功能,并启动
3、测试:启动eureka服务以及普通的product服务,直接访问product服务,http://localhost:8001/product/get/1,结果正常,如果通过zuul怎么访问呢?http://localhost:7001/microservice-product/product/get/1  注意端口是zuul的端口并且加上product微服务名称。从上面来看服务每次还要微服务名称比较麻烦,怎么处理呢?配置zuul的路由转发映射即可,配置文件中加上
zuul:
    routes:
        provider-product: # 路由名称,名称任意,路由名称唯一
        path: /product/** # 访问路径
        serviceId: microservice-product # 指定服务ID,会自动从Eureka中找到此服务的ip和端口
        stripPrefix: false # 代理转发时去掉前缀,false:代理转发时不去掉前缀 例如:为true时请求 /product/get/1,代理转发到/get/1
然后我们直接访问:http://localhost:7001/product/get/1  发现结果正常。

Zuul 过滤器实战
1、zuul核心就是过虑器,通过过虑器实现请求过虑,身份校验等。自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖它的4个方法:
filterType:返回字符串代表过滤器的类型,返回值有:pre:在请求路由之前执行   route:在请求路由时调用   post:请求路由之后调用, 也就是在route和errror过滤器之后调用   error:处理请求发生错误时调用
filterOrder:此方法返回整型数值,通过此数值来定义过滤器的执行顺序,数字越小优先级越高。
shouldFilter:返回Boolean值,判断该过滤器是否执行。返回true表示要执行此过虑器,false不执行。
run:过滤器的业务逻辑。
注意定义过滤器的时候不要忘了@Component注解将其注入到容器中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值