首页 > 其他分享 >SpringBoot整合Dubbo的快速使用教程

SpringBoot整合Dubbo的快速使用教程

时间:2024-07-05 22:59:40浏览次数:19  
标签:Dubbo 教程 服务 SpringBoot dubbo 服务提供者 注解 public

       

目录

一、什么是Dubbo?

二、SpringBoot整合Dubbo 

1、父工程引入依赖

2、各个Dubbo服务子模块引入依赖

3、服务提供者 

(1)启动类添加注解@EnableDubbo

(2)服务类添加注解@DubboService

(3)配置文件配置dubbo的信息

4、服务的消费者 

(1)启动类添加注解@EnableDubbo

(2)接口层通过注解@DubboReference将远程服务注入

(3)配置文件配置dubbo的信息


        Spring Boot是一款用于简化Java应用程序开发的框架,它提供了快速构建、易于配置和扩展的特性。Dubbo是一个高性能、轻量级的开源RPC框架,它支持多种传输协议和序列化方式,并可以实现服务之间的远程调用。本文将介绍如何使用Spring Boot整合Dubbo,快速搭建一个简单的分布式应用。

一、什么是Dubbo?

       Apache Dubbo是一款RPC服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang等多语言SDK实现。使用Dubbo开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用Dubbo提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

       在云原生时代,Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。

 

二、SpringBoot整合Dubbo 

1、父工程引入依赖

<!-- Dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-bom</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
        </dependency>

2、各个Dubbo服务子模块引入依赖

  <!-- dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.0.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-reload4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
            <version>3.0.9</version>
        </dependency>

3、服务提供者 
(1)启动类添加注解@EnableDubbo

        @EnableDubbo是Dubbo框架中的一个重要注解,主要用于激活Dubbo的自动配置和启动类上,开启Dubbo的支持。

@SpringBootApplication
@EnableDubbo
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class, args);
        System.out.println("Hello World!");
    }
}
(2)服务类添加注解@DubboService

  @DubboService是Dubbo框架中用于服务提供方的一个重要注解。它的主要作用是将服务接口的实现类注册到注册中心,使其能够被服务消费方发现和调用。@DubboService支持设置当前服务的版本号、重试次数、超时时间、负载均衡策略等信息。如下,就是设置了该服务的版本为1.0.0,负载均衡策略为轮询,重试次数为3,服务调用的超时时间为3000毫秒。Dubbo的负载均衡除了内置了轮询策略之外,还内置了如下一些常用的负载均衡策略:

  • 加权随机(random)

    默认算法,默认权重相同。所以,在权重相同的情况下,会在在服务提供者中随机选择一个来处理请求。该策略的优点是实现简单,能够较好地平均分配请求。缺点是在服务提供者数量较多时,可能无法保证每个提供者分配到的请求量完全均匀。

  • 最少活跃优先 + 加权随机(leastactive)

     活跃数是指每个服务提供者都有一个“活跃数”,表示当前正在处理的请求数量。当一个请求到达时,活跃数加一,请求处理完毕时,活跃数减一。最少活跃优先便是指在分配新请求时,优先选择活跃数最小的服务提供者。这样,性能较好的服务提供者(处理速度快,活跃数下降快)可以处理更多请求,而性能较差的提供者则自然接收较少请求。而当在选出活跃数最少的提供者后,如果存在多个活跃数相同的提供者,则根据它们的权重进行随机选择。权重越大,被选中的概率就越高。该策略的核心思想其实就是能者多劳的思想。该策略的优点是能够有效避免将请求发送到负载较高或响应较慢的服务提供者上。缺点是需要实时监控每个提供者的活跃请求数,增加了一定的系统开销

  • 最短响应优先 + 加权随机(shortestresponse)

       该策略从多个服务提供者中选择出响应时间最短的一个或多个来处理请求。当存在多个响应时间相同的服务提供者时,根据它们的权重进行加权随机选择。该策略的优点是能够灵活地应对服务提供者的性能变化,并优化请求处理速度。缺点是实现较为复杂,需要实时监控服务提供者的响应时间和计算权重

  • 一致性哈希(consistenthash)

       根据某个一致性哈希算法,确定请求应该发送到哪个服务提供者。该策略的优点是能够在服务提供者动态变更时,最大限度地减少对已分配请求的影响。缺点是算法较为复杂,实现和维护成本较高


@DubboService(version = "1.0.0", loadbalance = "roundrobin", retries = 3, timeout = 3000)
public class TestDubboServiceImpl implements TestDubboService {
    @Override
    public String sayHello(String name) {
        return "hello," + name;
    }

    @Override
    public ZhuoYe getZuoYe() {
        ZhuoYe zuoYe = new ZhuoYe();
        zuoYe.setName("zhuoye-1")
                .setDescription("帅呆了!!!");
        return zuoYe;
    }
}
(3)配置文件配置dubbo的信息

dubbo:
  application:
    name: dubbo-springboot-demo-provider  #当前应用名称
  protocol:
    name: dubbo   #协议名称
    port: -1   #配置为-1,则会分配一个没有被占用的端口
  registry:
    address: zookeeper://192.168.190.129:2181 #注册中心地址,这里选择zookeeper作为注册中心,也是官方推荐的
    timeout: 10000  #连接到注册中心的超时时间10S,时间太多可能很容易注册失败,默认5s

更多的配置可以参考官方文档

4、服务的消费者 
(1)启动类添加注解@EnableDubbo
@SpringBootApplication
@EnableDubbo
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class, args);
        System.out.println("Hello World!");
    }
}
(2)接口层通过注解@DubboReference将远程服务注入

   @DubboReference 是 Dubbo 提供的一个用于引用远程服务的注解,它通常用在服务消费者的实现类中,用于标记一个远程服务的引用。这个注解会将指定的远程服务连接到本地的某个接口上,使得你可以像调用本地接口一样调用远程服务。@DubboReferencee也支持设置当前服务的版本号、重试次数、超时时间、负载均衡策略等信息。而且@DubboReference注解中设置的属性会覆盖 @DubboService注解中的相应属性。也就是说当我们在@DubboReference@DubboService中都设置了相同的属性,那么@DubboReference中的属性值将优先生效。通过覆盖属性,可以根据不同的场景或需求灵活地调整服务引用的配置。例如,在开发环境中可能需要较短的超时时间以快速检测问题,而在生产环境中可能需要更长的超时时间以确保稳定性。

@RestController
@RequestMapping("dubbo")
public class TestDubboController {

    @DubboReference(version = "1.0.0",timeout = 1000,loadbalance="leastactive",retries = 2)
    private TestDubboService testDubboService;

    @GetMapping("hello")
    public String hello(String name) {
        return testDubboService.sayHello(name);
    }


    @GetMapping("getZhuoye")
    public ZhuoYe getZhuoye() {
        return testDubboService.getZuoYe();
    }
}
(3)配置文件配置dubbo的信息
dubbo:
  application:
    name: dubbo-springboot-demo-comsumer
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://192.168.190.129:2181
    timeout: 10000

标签:Dubbo,教程,服务,SpringBoot,dubbo,服务提供者,注解,public
From: https://blog.csdn.net/weixin_50348837/article/details/140138374

相关文章

  • springboot的设计与实现(文档+源码)校园周边美食探索及分享平台
    大家好,我是永钊,一个混迹在java圈的码农,今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台,项目源码请联系永钊,目前有各类成品毕设javawebsshssmspringboot等等项目框架,源码丰富,欢迎咨询。 本网站系统研究了基于Spring Boot框架的校园周边美食探索及......
  • springboot校园资产管理的设计与实现(文档+源码)
    大家好,我是永钊,一个混迹在java圈的码农,今天要和大家聊的是一款基于springboot的校园资产管理,项目源码请联系永钊,目前有各类成品毕设javawebsshssmspringboot等等项目框架,源码丰富,欢迎咨询。 本网站系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网......
  • Springboot+Shiro+Mybatis+mysql实现权限安全认证
    Shiro是Apache的一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。Shiro主要分为两个部分就是认证和授权两部分一、介绍Subject代表了当前用户的安全操作SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组......
  • springboot+vue+mybatis实验室管理系统+PPT+论文+讲解+售后
    实验室管理系统提供给用户一个实验室信息管理的系统,最新的实验室信息让用户及时了解实验室管理动向,,还能通过交流区互动更方便。本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、学生和教师三个部分,系统管理员主要功能包括......
  • 机器人控制系列教程之Delta机器人动力学分析
    动力学简介机器人动力学分析是已知各运动构件的尺寸参数和惯性参数的情况下,求解末端运动状态与主驱动力矩之间的函数关系。意义:对并联机器人动力学分析的意义体现在:为伺服电机的选型提供理论依据;获得动力学参数为目标函数的最优问题做性能评价指标;为高精度控制提供基......
  • 基于SpringBoot+Vue+uniapp的民族婚纱预定系统的详细设计和实现(源码+lw+部署文档+讲
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的车辆管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的库存管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的游戏交易系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • SpringBoot, Maven, Apache 之间的关系,SpringBoot 简介
    SpringBoot是什么?SpringBoot是一种基于Spring框架的开源框架,用于快速创建独立的、生产级别的Spring应用程序。SpringBoot可以自动配置大部分Spring应用程序所需的常见功能和库,从而减少了开发人员的工作量和时间。SpringBoot提供了一种“约定优于配置”的方式,使得开发人员可......