在非 Spring Cloud 项目中使用 Sentinel 主要有两种方式:集成 Sentinel SDK 和使用 Sentinel Gateway。下面分别介绍这两种方式的使用方法。
1. 集成 Sentinel SDK
如果你的应用是一个普通的 Java 应用,而非 Spring Boot/Spring Cloud 项目,你可以直接集成 Sentinel SDK 来使用 Sentinel 的功能。
步骤:
-
添加依赖:在你的项目中添加 Sentinel 的依赖项。如果你使用 Maven,可以在
pom.xml
文件中添加以下依赖:<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>版本号</version> </dependency>
-
初始化 Sentinel:在应用启动时初始化 Sentinel,通常在主类的
main
方法中完成:import com.alibaba.csp.sentinel.init.InitFunc; public class MyApplication { public static void main(String[] args) { InitFunc.doInit(); // 应用启动代码 } }
-
使用 API:在需要的地方使用 Sentinel 的 API 来进行流量控制和熔断等操作。例如,使用
Entry
来保护一段代码块:import com.alibaba.csp.sentinel.entry.Entry; import com.alibaba.csp.sentinel.entry.EntryOptions; import com.alibaba.csp.sentinel.slots.block.BlockException; public class ExampleService { public String hello(String name) { try { Entry entry = Entry.enter("hello"); // 执行业务逻辑 return "Hello, " + name; } catch (BlockException e) { // 处理限流或熔断的情况 return "Too many requests!"; } finally { Entry.exit(); } } }
-
配置规则:可以通过 Sentinel 控制台或其他方式配置具体的限流和熔断规则。
2. 使用 Sentinel Gateway
如果你的应用是一个网关服务,可以使用 Sentinel Gateway 作为网关层的流量控制组件。
步骤:
-
添加依赖:同样需要在项目中添加 Sentinel Gateway 的相关依赖。
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-gateway-core</artifactId> <version>版本号</version> </dependency> <!-- 如果使用了Jetty作为HTTP服务器 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-gateway-jetty-adapter</artifactId> <version>版本号</version> </dependency>
-
初始化 Gateway:初始化 Sentinel Gateway,并配置路由规则。
import com.alibaba.csp.sentinel.adapter.gateway.common.GatewaySentinelClient; import com.alibaba.csp.sentinel.adapter.gateway.jetty.JettyGatewayAppConfig; import com.alibaba.csp.sentinel.adapter.gateway.jetty.JettyGatewayMainRunner; import com.alibaba.csp.sentinel.adapter.gateway.sc.SCGatewayConfigManager; import org.eclipse.jetty.server.Server; public class MyGatewayApplication { public static void main(String[] args) throws Exception { JettyGatewayAppConfig appConfig = new JettyGatewayAppConfig(); appConfig.setPort(8769); // 设置监听端口 appConfig.setContextPath("/"); // 设置上下文路径 // 初始化路由规则 SCGatewayConfigManager.loadGatewayConfig("resource-name", "{ \"control Transport\": \"DISK\" }"); Server server = JettyGatewayMainRunner.createServer(appConfig); GatewaySentinelClient.start(server); } }
-
配置路由规则:通过 Sentinel 控制台或其他方式配置路由规则。
注意事项
- 初始化顺序:确保在应用启动时正确地初始化 Sentinel,尤其是当使用非默认配置时。
- 规则配置:规则配置可以通过 Sentinel 控制台进行,也可以通过代码或者其他配置中心动态加载。
- 异常处理:在使用
Entry.enter()
时,需要注意处理可能出现的BlockException
异常。
通过上述步骤,你可以在非 Spring Cloud 项目中使用 Sentinel 进行流量控制和熔断。这种方式更加通用,适用于任何 Java 应用程序。