锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. SpringBoot整合Dubbo的快速使用教程

SpringBoot整合Dubbo的快速使用教程

0
  • JAVA
  • 发布于 2024-08-16
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

目录

一、什么是 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、父工程引入依赖

        
org.apache.dubbo
dubbo-bom
${dubbo.version}
pom
import

        
org.apache.dubbo
dubbo-dependencies-zookeeper-curator5
${dubbo.version}
pom

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

 

org.apache.dubbo
dubbo-spring-boot-starter
3.0.9


org.apache.dubbo
dubbo-dependencies-zookeeper-curator5
pom


slf4j-reload4j
org.slf4j


3.0.9

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
标签: #软件开发 1171 #JAVA 991
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.