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

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

时间:2023-01-05 22:31:21浏览次数:61  
标签:dubbo 框架 Dubbo 适配 sentinel 整合 Sentinel apache

开源框架适配

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

【深入浅出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)_spring_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)_ide_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)_ide_06

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

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

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

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

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

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

标签:dubbo,框架,Dubbo,适配,sentinel,整合,Sentinel,apache
From: https://blog.51cto.com/alex4dream/5992006

相关文章

  • Pomelo:网易开源基于 Node.js 的游戏服务端框架
    ​​Pomelo​​是基于Node.js的高性能、分布式游戏服务器框架。它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑......
  • 日志框架之TLog讲解分析
    目录1TLog1.1引言1.2简介1.3TLog操作1.3.1pom.xml1.3.2替换logback配置项1.3.3测试1.4TLog接入方式1.5TLog的基本原理1.5.1日志标签1.5.2TLogContext1.5.3TLog......
  • android游戏开发框架libgdx环境搭建
    原文链接:android游戏开发框架libgdx的使用(一)--环境搭建Libgdx是一款支持2D与3D游戏开发的游戏类库,兼容大多数微机平台(标准JavaSE实现,能运行在Mac、Linux、Windows等系统)......
  • C# Windows 窗体的.Net 框架绘图技术
     当编写一个典型的Windows窗体​​程序​​时,窗体和控件的绘制、效果等操作是不需要特别加以考虑的。这是为什么呢?因为通过使用​​.Net​​本文针对那些Windows窗......
  • 重磅直播|PatchmatchNet:一种高效的Multi-view Stereo框架(CVPR2021)
    本期由苏黎世联邦理工学院ComputerVisionandGeometryGroup王方锦华博士分享,分享的主题为《PatchmatchNet:基于传统PatchMatch算法的高效Multi-viewStereo框架》,主讲人会......
  • 界面控件DevExpress WinForm——属于WinForm组件的MVVM框架
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风......
  • 在线客服系统的源码中Golang Gin框架实现IP白名单机制
    我的客服系统有一些接口是专门给内部调用的,只允许其他内部系统来调用,不允许随意访问,可以使用IP白名单机制使用Gin框架实现IP白名单机制可以使用中间件的方式实现。你......
  • Hadoop中的MapReduce框架
    一个MapReduce作业通常会把输入的数据集切分为若干独立的数据块,由Map任务以完全并行的方式去处理它们。          框架会对Map的输出......
  • Spark框架下均值漂移算法对舆情聚类的分析
    知网链接原文链接张京坤,  王怡怡软件导刊   2022年21卷第6期 页码:141-146DOI:10.11907/rjdk.211889    中图分类号:TP274纸质出版日期:2022-06-15,收稿日期:2......
  • 微服务框架Dubbo环境部署实战
    目录一.dubbo概述1.什么是微服务2.dubbo介绍3.dubbo架构二.部署dubbo服务1.部署JDK环境2.部署provider组件3.验证zookeeper的znode信息4.部署consumer环境5.启动多个消费者......