4

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架...

 1 year ago
source link: https://blog.51cto.com/alex4dream/5992006
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

开源框架适配

为了减少开发的复杂程度,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
  • 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

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_apache

添加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的业务逻辑服务提供者。

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_ide_02
引入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)】,当启动完成之后,如下图所示。

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_apache_03

访问dashboard的页面

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_spring_04
接入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

启动成功。

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_apache_05

同理服务消费者也是一样,当启动服务提供者和消费者之后,必须要进行一次调用才可以出现服务,如下图所示。访问页面服务。

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_spring_06

发现出现了服务提供者和服务消费者

当我们点击了服务消费者的服务,便可以查看到服务消费者服务的调用链路功能服务。

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_spring_07

服务提供者也是一样,如下图所示。

【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_ide_08

这样子我们就完成了Dubbo3服务接入到了我们的Sentinel,并且接入了dashboard服务,进行完成对应的服务。至于后面如何进行配置做流控和限流等等规则,我们后面的章节会介绍,不用担心!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK