写点什么

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

作者:洛神灬殇
  • 2023-01-05
    江苏
  • 本文字数:3396 字

    阅读完需:约 11 分钟

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

开源框架适配

为了减少开发的复杂程度,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)@SpringBootApplicationpublic class DubboProviderApplication {    public static void main(String[] args) {        SpringApplication.run(DubboProviderApplication.class,args);    }}
复制代码

引入 application.yml 配置文件

server:  port: 8081spring:  application:    name: provider-applicationdubbo:  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 服务,进行完成对应的服务。至于后面如何进行配置做流控和限流等等规则,我们后面的章节会介绍,不用担心!

发布于: 刚刚阅读数: 3
用户头像

洛神灬殇

关注

🏆 InfoQ写作平台-签约作者 🏆 2020-03-25 加入

【个人简介】酷爱计算机科学、醉心编程技术、喜爱健身运动、热衷悬疑推理的“极客达人” 【技术格言】任何足够先进的技术都与魔法无异 【技术范畴】Java领域、Spring生态、MySQL专项、微服务/分布式体系和算法设计等

评论

发布
暂无评论
【深入浅出Sentinel原理及实战】「框架整合专题」Sentinel服务框架对接Dubbo服务框架整合开发指南(4)_dubbo_洛神灬殇_InfoQ写作社区