开源框架适配
为了减少开发的复杂程度,Sentinel 对大部分的主流框架都进行了适配,例如:Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux 和 Reactor 等。
云原生微服务体系
- Spring Boot/Spring Cloud
- Quarkus
Web 适配
- Web Servlet
- Spring Web
- Spring WebFlux
- JAX-RS (Java EE)
RPC 适配
- Apache Dubbo
- gRPC
- Feign
- SOFARPC
HTTP client 适配
- Apache HttpClient
- OkHttp
Reactive 适配
- Reactor
API Gateway 适配
- Spring Cloud Gateway
- Netflix Zuul 1.x
- Netflix Zuul 2.x
Apache RocketMQ
注意:适配模块仅提供相应适配功能,若希望接入 Sentinel 控制台,请务必参考 Sentinel 控制台文档。
RPC适配 - Dubbo/Dubbo3
主要对接Dubbo/Dubbo3的服务框架控制实现指南。
Sentinel Apache Dubbo Adapter的Maven依赖
Sentinel提供Dubbo的相关适配Sentinel Dubbo Adapter - dubbo-sentinel-support,主要包括针对 Service Provider 和 Service Consumer 实现的 Filter。
dubbo3所支持相关模块
sentinel-apache-dubbo3-adapter 兼容 Apache Dubbo 3.0.5 及以上版本,自Sentinel 1.8.5开始支持。所以对于Apache Dubbo 3.0.5 及以上版本,使用时需引入以下模块(以 Maven 为例)。
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-apache-dubbo3-adapter</artifactId> <version>x.y.z</version> </dependency> 复制代码
dubbo所支持相关模块
sentinel-apache-dubbo-adapter兼容 Apache Dubbo 2.7.x 及以上版本,自 Sentinel 1.5.1 开始支持,对于 Apache Dubbo 2.7.x 及以上版本,使用时需引入以下模块(以 Maven 为例。
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-apache-dubbo-adapter</artifactId> <version>x.y.z</version> </dependency> 复制代码
低版本dubbo所支持相关模块
sentinel-dubbo-adapter(兼容 Dubbo 2.6.x 版本),对于 Dubbo 2.6.x 及以下版本,使用时需引入以下模块(以 Maven 为例):
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-dubbo-adapter</artifactId> <version>x.y.z</version> </dependency> 复制代码
引入此依赖后,Dubbo 的服务接口和方法(包括调用端和服务端)就会成为 Sentinel 中的资源,在配置了规则后就可以自动享受到 Sentinel 的防护能力。
实战整合Dubbo3进行限流控制
建立属于dubbo3服务的maven的module
添加Dubbo3的基础依赖管理
暂时引入对应的maven依赖,我们采用的3.0.7版本的dubbo服务版本。
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-bom</artifactId> <version>3.0.7</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>3.0.7</version> <type>pom</type> </dependency> </dependencies> </dependencyManagement> 复制代码
添加Dubbo3的基础依赖Maven组件
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <type>pom</type> </dependency> 复制代码
添加Dubbo3的application.yml配置文件
package com.alibaba.alibabaserverplatform; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.context.annotation.Configuration; @Configuration @EnableDubbo(scanBasePackages = "com.alibaba.alibabaserverplatform") public class DubboConfiguration {} 复制代码
建立服务提供者
搭建Maven模块建立
alibaba-server-platform-service的业务逻辑服务提供者。
引入Dubbo3的Maven配置
引入相关的xml配置信息引入
alibaba-server-platform-dubbo的配置。并且引入sentinel-apache-dubbo3-adapter的dubbo3适配器
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>alibaba-server-platform-dubbo</artifactId> <version>${project.version}</version> </dependency> <!-- Sentinel adapter and transport --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-apache-dubbo3-adapter</artifactId> <version>1.8.6</version> </dependency> </dependencies> 复制代码
引入Dubbo3的启动服务应用类
建立DubboProviderApplication的类,并且进行相关引入DubboConfiguration类。
@Import(DubboConfiguration.class) @SpringBootApplication public class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class,args); } } 复制代码
引入application.yml配置文件
server: port: 8081 spring: application: name: provider-application dubbo: application: name: ${spring.application.name} registry: id: ${spring.application.name}_registry01 address: zookeeper://${zookeeper.address:localhost}:2181?client=curator protocol: name: dubbo port: 28080 consumer: timeout: 3000 check: false # 默认true.服务启动时候检查是否可用,服务不可用时无法启动项目, false则不检查 retries: 2 # 服务重试次数 复制代码
启动我们的Sentinel-Dashboard
如果不太了解如何启动dashboard,可以参考我的上一篇文章【【深入浅出 Sentinel 原理及实战】「基础实战专题」零基础探索分析 Sentinel 控制台开发指南(3)】,当启动完成之后,如下图所示。
访问dashboard的页面
接入dubbo服务到dashboard
Sentinel Dashboard用于配置规则、查看监控、机器发现等功能。
接入Dashboard 的步骤(缺一不可):
应用引入
sentinel-transport-simple-http 依赖,以便控制台可以拉取对应应用的相关信息 给应用添加相关的启动参数。
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>1.8.6</version> </dependency> 复制代码
需要配置的 JVM 参数
- -Dcsp.sentinel.api.port:客户端的port,用于上报相关信息,指定客户端监控API的端口(默认是 8719)
- -Dcsp.sentinel.dashboard.server:指定控制台地址和端口
- -Dproject.name:应用名称,会在控制台中显示
- -Djava.net.preferIPv4Stack=true:某些环境下本地运行 Dubbo 服务还需要加上 -Djava.net.preferIPv4Stack=true 参数。比如 Service Provider 示例的启动参数:
Service Provider示例的启动参数
添加一下的JVM启动参数之后进行启动
-Djava.net.preferIPv4Stack=true -Dcsp.sentinel.api.port=8721 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=dubbo-provider-demo 复制代码
启动成功。
同理服务消费者也是一样,当启动服务提供者和消费者之后,必须要进行一次调用才可以出现服务,如下图所示。访问页面服务。
发现出现了服务提供者和服务消费者
当我们点击了服务消费者的服务,便可以查看到服务消费者服务的调用链路功能服务。
服务提供者也是一样,如下图所示。
这样子我们就完成了Dubbo3服务接入到了我们的Sentinel,并且接入了dashboard服务,进行完成对应的服务。