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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【深入浅出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

image.png

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

image.png


引入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)】,当启动完成之后,如下图所示。

image.png

访问dashboard的页面

image.png


接入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
复制代码

启动成功。

image.png


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

image.png


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


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

image.png

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

image.png

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




相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
25天前
|
负载均衡 监控 Dubbo
Dubbo 原理和机制详解(非常全面)
本文详细解析了 Dubbo 的核心功能、组件、架构设计及调用流程,涵盖远程方法调用、智能容错、负载均衡、服务注册与发现等内容。欢迎留言交流。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Dubbo 原理和机制详解(非常全面)
|
1月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
1月前
|
运维 监控 算法
聊一聊Sentinel背后的原理
本文介绍了Sentinel的核心原理,包括流量控制、熔断降级、系统负载保护、实时监控和统计、与多种微服务框架的集成能力以及扩展性,强调了Sentinel在保障分布式系统稳定性方面的重要性。
127 0
|
3月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
3月前
|
负载均衡 Dubbo 应用服务中间件
Dubbo服务调用过程原理
该文章主要介绍了Dubbo服务调用过程的原理,包括服务调用的主要阶段和服务调用的具体步骤。
Dubbo服务调用过程原理
|
3月前
|
缓存 Dubbo Java
Dubbo服务消费者启动与订阅原理
该文章主要介绍了Dubbo服务消费者启动与订阅的原理,包括服务消费者的启动时机、启动过程以及订阅和感知最新提供者信息的方式。
Dubbo服务消费者启动与订阅原理
|
3月前
|
Dubbo 网络协议 Java
深入掌握Dubbo服务提供者发布与注册原理
该文章主要介绍了Dubbo服务提供者发布与注册的原理,包括服务发布的流程、多协议发布、构建Invoker、注册到注册中心等过程。
深入掌握Dubbo服务提供者发布与注册原理
|
3月前
|
负载均衡 Dubbo Java
Dubbo服务Spi机制和原理
该文章主要介绍了Dubbo中的SPI(Service Provider Interface)机制和原理,包括SPI的基本概念、Dubbo中的SPI分类以及SPI机制的实现细节。
Dubbo服务Spi机制和原理
|
3月前
|
缓存 负载均衡 Dubbo
Dubbo服务集群容错原理(重要)
该文章主要介绍了Dubbo服务集群容错的原理,包括集群容错技术的概念、Dubbo中使用的集群容错技术种类及其原理。
|
6月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
下一篇
无影云桌面