Sentinel和Hystrix一样,为了防止雪崩,引起整体系统的瘫痪,Sentinel产生了。
首先是jar包的下载:https://github.com/alibaba/Sentinel
不管是在虚拟机还是服务器,还是在windows客户端
使用java -jar xxxxx.jar命令即可运行Sentinel,记得先安装好java jdk环境
成功运行以后,在本地的8080端口可以使用(注意:这里tomcat默认8080,切勿冲突)
运行成功以后访问127.0.0.1:8080即可
其账号和密码都是sentinel;
再就是进行对于pom文件的配置
1.pom.xml的配置:
#服务名称
spring.application.name=29-nacos-discovery-provider
#nacos注册中心的连接地址
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8801,127.0.0.1:8802,127.0.0.1:8803
#spring.cloud.nacos.discovery.server-addr=192.168.172.128:80
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#nacos的用户名和密码
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#spring boot actuator 监控和健康检查功能
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
#服务提供者是wuhan集群
#spring.cloud.nacos.discovery.cluster-name=wuhan
#演示元数据可先将指定集群屏蔽掉
#spring.cloud.nacos.discovery.metadata.version=v2
#服务提供者2的test命名空间
#spring.cloud.nacos.discovery.namespace=355c7719-691c-4dcf-a13a-8ed05aac4534
#指定sentinel-dashboard控制台的连接地址
spring.cloud.sentinel.transport.dashboard=127.0.0.1:8080
3.消费者的properties配置文件
#内嵌的web服务器端口
server.port=8079
#当前项目的服务名称
spring.application.name=29-nacos-discovery-consumer
#nacos注册中心集群的连接地址
#spring.cloud.nacos.discovery.server-addr=192.168.172.128:8801,192.168.172.128:8802,192.168.172.128:8803
#spring.cloud.nacos.discovery.server-addr=192.168.172.128:80
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#nacos的用户名和密码
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#spring boot actuator 监控和健康检查功能
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
#自定义配置,远程服务提供者的服务名
service.name=http://29-nacos-discovery-provider
#spring.main.allow-bean-definition-overriding=true
#通过配置文件指定负载均衡策略,[可以是自定义的类也可以是系统预定义的负载均衡类]
#29-nacos-discovery-provider是远程服务提供者的名称,个性化需求,不同服务采用不同负载均衡策略
#29-nacos-discovery-provider.ribbon.NFLoadBalancerRuleClassName=com.softeem.ribbon.MyNacosRule
#29-nacos-discovery-provider2.ribbon.NFLoadBalancerRuleClassName=com.softeem.ribbon.MyNacosRule2
#iping的策略[与负载均衡策略写法类似]
#29-nacos-discovery-provider.ribbon.NFLoadBalancerPingClassName=com.netflix.loadbalancer.PingUrl
#29-nacos-discovery-provider2.ribbon.NFLoadBalancerPingClassName=com.netflix.loadbalancer.PingUrl
#指定集群的名称[消费都调用wuhan集群]
#spring.cloud.nacos.discovery.cluster-name=wuhan
#演示元数据可先将指定集群屏蔽掉[默认是不支持版本号负载均衡的所以只做配置还是不能达到预期效果]
#spring.cloud.nacos.discovery.metadata.version=v1
#服务消费者的dev命名空间
#spring.cloud.nacos.discovery.namespace=475184de-33e8-4959-8429-036a8d395d23
#开启饥饿加载,一启动就从注册中心获[全部]取服务进行缓存,默认是懒加载
#ribbon.eager-load.enabled=true
#为哪些客户端开启饥饿加载,多个客户端使用逗号分隔(非必须)
#ribbon.eager-load.clients=29-nacos-discovery-consumer
#配置feign的连接、读取[全部服务]超时时间[单位毫秒]
#feign.client.config.default.read-timeout=2
#feign.client.config.default.connect-timeout=2
#配置要调用的某个具体服务提供者的超时时间
#feign.client.config.29-nacos-discovery-provider.read-timeout=5000
#feign.client.config.29-nacos-discovery-provider.connect-timeout=5000
#配置feign底层使用httpclient进行远程调用,默认feign也是httpclient
#feign的老版本,底层是采用的JDK的httpURLconnection发起远程调用,效率不如RestTemplete,现在新版本效率都差不多
#feign.httpclient.enabled=true
#feign.httpclient.max-connections=200
#feign.httpclient.max-connections-per-route=50
#指定sentinel-dashboard控制台的连接地址
spring.cloud.sentinel.transport.dashboard=127.0.0.1:8080
4.在普通的工程下
提供service
package com.softeem.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = “29-nacos-discovery-provider”)
public interface EchoFeignService {
@GetMapping("/echo/hello")
default String hello() {
return "hello";
}
@GetMapping("/echo/{str}")
String echo(@PathVariable("str") String str);
@GetMapping("/divide")
String divide(@RequestParam("a") Integer a, @RequestParam("b") Integer b);
/**
* feign声明的接口可以有默认实现, 就是可以不需要远程服务提供者实现,自己实现了
*
* @param a
* @return
*/
default String divide(Integer a) {
System.out.println("consumer devide method......");
return divide(a, 1);
}
@GetMapping("/notFound")
String notFound();
}
在此,我们用消费者的端口,调用远程方法
在哨兵流量监控页面就会把我们刚刚访问的添加进来
QPS为每秒请求数,如果大于阈值,会触发流控。
线程数是设置了调用该api的最大线程数,如果大于阈值,也会触发流控。
流控模式:关联:关联的资源达到阈值,限流自己。
那么也有可能用到warm up, 这是这样的,我们设置阈值为10,预热时间为5的话,初始阈值就为10/3,经过5秒的预热,最终阈值为10
排队等待:如字面意思,每个请求在超时时间内排队等待进行处理。
本篇为流控篇