Sentinel的使用笔记

简介: Sentinel的使用笔记

Sentinel简介


Sentinel是分布式系统的流量防卫兵


https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D


Sentinel安装


注意:

1)8080和8719端口要开放

2)window和Linux安装一样

3)建议刚开始学的时候微服务和Sentinel在一台服务器上,否则有坑(见文章下面的坑)


下载地址

https://github.com/alibaba/Sentinel/releases


16.png


java -jar sentinel-dashboard-1.7.0.jar


http://ip:8080/    账号和密码都是sentinel


17.png


Sentinel监控微服务


下面的项目是 SpringBoot2.2.2 + springcloud-alibaba 2.1.0

在pringboot+web的基础之上


添加依赖


 <!--alibaba-nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!--   sentinel     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>


修改applicationyml,添加注册中心地址和sentinel地址


server:
  port: 8401
spring:
  application:
    name: sentinel-service
  cloud:
    nacos:
      discovery: #Nacos注册中心地址
        server-addr: 39.105.30.146:8848
    sentinel:
      transport: #dashboard地址
        dashboard: localhost:8080
        port: 8719  #默认端口,如果被占用则从8719依次+1扫描
management:
  endpoints:
    web:
      exposure:
        include: "*"


修改主启动类


@EnableDiscoveryClient


添加controller


@RestController
public class HelloController {
    @GetMapping("/testA")
    public String testA() {
        return "---------testA";
    }
    @GetMapping("/testB")
    public String testB() {
        return "---------testB";
    }
}


启动项目并且多访问几次


http://localhost:8401/testA

http://localhost:8401/testB


结果如下图所示


18.png


自定义限流处理类


//CustomerBlockHandler
    @GetMapping("/rateLimit/CustomerBlockHandler")
    @SentinelResource(value = "CustomerBlockHandler",//热点规则的资源名称
            blockHandlerClass = CustomerBlockHandler.class,//自定义限流处理类
            blockHandler = "handlerException2")//流量达到限制时调用  自定义限流处理类(CustomerBlockHandler)里的方法(handlerException2)
    public CommonResult CustomerBlockHandler(){
        return new CommonResult(200,"按客户自定义限流测试OK", new Payment(2020L, "serial003"));
    }


public class CustomerBlockHandler {
    public static CommonResult handlerException2(BlockException exception) {
        return new CommonResult(4444, "按客户自定义2,global handlerException", new Payment(2020L, "serial0003"));
    }
}


遇到的坑(没有解决,但是有参考意义)


日志中出现这种错误


2019-07-23 14:57:33.256 ERROR 14788 --- [pool-2-thread-1] c.a.c.s.dashboard.metric.MetricFetcher   : 
Failed to fetch metric from <http://192.16.100.141:8721/metric?startTime=1563865044000&endTime=1563865050000&refetch=false>
 (ConnectionException: Connection refused: no further information)


我当时是把Sentinel启动在阿里云服务器上,然后我电脑在启动SpringBoot微服务A(需要Sentinel监控)时候微服务A给Sentinel发送的地址默认是内网地址(192.xxx),而不是外网地址,所以当Sentinel给192.xx发送心跳就发送不到,就监控不到服务和请求


解决步骤:


1)手动设置一个参数(csp.sentinel.heartbeat.client.ip)为真实的外网地址

2)保证A能ping通B,B能ping通A  (有时候A能ping通B并不一定B能ping通A)


@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosSentinelOpenfeign80Application {
    public static void main(String[] args) {
        String ip = IPUntils.getOutIPV4();
        System.setProperty(TransportConfig.HEARTBEAT_CLIENT_IP, ip);
        SpringApplication.run(NacosSentinelOpenfeign80Application.class, args);
    }
}


sentinel监控不到服务或者监控不到请求


出现的根本原因还是上面的那个问题,下下策把sentinel和微服务放在一起就没这问题

目录
相关文章
|
29天前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
3月前
|
监控 Java 应用服务中间件
Sentinel原理及实践
Sentinel原理及实践
89 1
|
监控 Dubbo Java
Sentinel介绍及搭建
Sentinel介绍及搭建
304 0
|
监控 Java 应用服务中间件
sentinel简介
sentinel简介
193 0
|
监控 Dubbo Java
超详细的Sentinel入门
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
超详细的Sentinel入门
|
算法 Sentinel
Sentinel学习二
如果我们不对Sentinel的异常提示做自定义,那么此时的提示是非常不详细的。如果做了自定义,就可以看到下面自定义的提示。sentinel提供了@SentinelResource注解帮助我们来实现自定义的熔断限流后的自定义方法处理,可以根据sentinel的aop可以看到处理的example,从而更为清晰的认识sentinel强大的功能。
98 0
Sentinel学习二
|
算法 Nacos Sentinel
Sentinel源码分析总结
写作目的 最近在看Sentinel源码,遇到了几个问题,想再此记录和分享一下遇到的几个问题,方便读者看到我的文章后就不用在继续搜索了。
120 0
Sentinel源码分析总结
|
监控 Dubbo Java
Sentinel 使用入门|学习笔记
快速学习 Sentinel 使用入门
151 0
Sentinel 使用入门|学习笔记
|
存储 监控 Dubbo
Sentinel 介绍| 学习笔记
本次课程主要分为三大部分,在这一部分中,将会介绍 Sentinel 诞生的背景、增长的核心特性。Sentinel 的完善的开源生态,以及流控降级组件对比。在第二部分中,会演示 Sentinel 的一些非常基本的使用场景,包括与 Spring cloud 的外边应用结合,Spring cloud 网关结合以及与 Dubbo 服务进行结合的演示。在第三部分中,介绍一下阿里云应用高可用服务 AHAS 的使用,以及如何快速的接入阿里云 AHAS 真正的流控降级。
289 0
Sentinel 介绍| 学习笔记
|
消息中间件 监控 算法
sentinel技术分享
Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。
318 0
sentinel技术分享