核心概念详解:资源、规则、Context、Entry

引言:为什么要理解核心概念 上一篇我们用20行代码实现了第一个Sentinel程序,是不是很简单? 但如果只停留在"会用"的层面,遇到复杂场景时你会发现: 为什么同一个资源名称,不同地方的限流会互相影响? 如何区分同一个接口的不同调用来源? Entry到底是什么?为什么必须调用exit()? Context有什么用?什么时候需要手动创建? 这些问题的答案,都藏在Sentinel的四大核心概念中:资源(Resource)、规则(Rule)、上下文(Context)、入口(Entry)。 理解了这些概念,你就掌握了Sentinel的"第一性原理",可以灵活应对各种场景。 一、资源(Resource):保护的目标 1.1 什么是资源 资源是Sentinel保护的目标,可以是任何你想保护的东西: 应用层面: ├─ 接口:/api/order/create ├─ 方法:OrderService.createOrder() ├─ 代码块:关键业务逻辑 └─ URL:外部API调用 基础设施层面: ├─ 数据库连接 ├─ Redis连接 ├─ 线程池 └─ 消息队列 核心理念:只要是"有限的、需要保护的东西",都可以定义为资源。 1.2 资源的定义方式 方式1:编程方式(最灵活) Entry entry = null; try { entry = SphU.entry("resourceName"); // 受保护的代码 } catch (BlockException ex) { // 限流处理 } finally { if (entry != null) { entry.exit(); } } 优点: ✅ 灵活,可以保护任意代码块 ✅ 可以传入自定义参数 ✅ 性能最优(没有反射) 缺点: ❌ 代码侵入性强 ❌ 需要手动管理Entry 方式2:注解方式(最简洁) @SentinelResource(value = "getUserById", blockHandler = "handleBlock") public User getUserById(Long id) { return userMapper.selectById(id); } // 限流处理方法 public User handleBlock(Long id, BlockException ex) { return User.getDefault(); } 优点: ...

2025-01-21 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...