(1)问题描述

在搭建sentinel工程的时候,采用SphO方式手动定义资源,启动工程后,访问资源,发现报错,报错内容大致如下:

o.s.web.servlet.HandlerExecutionChain    :
 HandlerInterceptor.afterCompletion threw exception

com.alibaba.csp.sentinel.ErrorEntryFreeException: The order of entry exit can't be paired with the order of entry,
 current entry in context: <testSphO>, but expected: </api/sentinel/testSphO>

 

o.s.web.servlet.HandlerExecutionChain    :
 HandlerInterceptor.afterCompletion threw exception

com.alibaba.csp.sentinel.ErrorEntryFreeException: The order of entry exit can't be paired with the order of entry,
 current entry in context: <testSphO>, but expected: </api/sentinel/testSphO>

(2)解决方案

报错原因:

使用SphO方式定义资源时候,通过entry()方法开启,但是没有调用exit()结束,所以导致上面的报错。

解决办法:

调用【SphO.exit()】关闭资源。

具体案例代码如下:

@GetMapping("/testSphO")
public String testSphO() {
    boolean testSphO = SphO.entry("testSphO");
    if (testSphO) {
        try {
            // TODO 这里执行具体业务逻辑
            System.out.println("这里执行具体业务逻辑");
            return "sentinel call testSphU() method.";
        } finally {
            SphO.exit(); // 关闭
        }
    } else {
        // TODO 这里执行限流的逻辑
        System.out.println("这里执行限流的逻辑");
        return "testSphU 被限流啦。";
    }
}

以上就是我遇到的SphO错误以及解决方案。

GitHub 加速计划 / sentine / Sentinel
22.24 K
7.98 K
下载
alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件,提供实时监控、限流、降级和系统保护功能,适用于微服务治理场景。
最近提交(Master分支:3 个月前 )
195150bc * fix issue 2485 which occur oom when using async servlet request. * optimize imports * 1. fix the same issue in the webmvc-v6x 2. improve based on review comments 2 个月前
b78b09d3 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐