Dubbo

1.Dubbo两种常用使用方式:

  • 给service与controller分开.Controller层通过dubbo调用service层

  • 加入SpringCloud进行服务service层调用

2.Dubbo与Feign的区别:

  • Dubbo是基于Dubbo协议调用的

  • Feign是基于HTTP协议调用

3.Dubbo启动流程:

  • 服务提供者启动,将自身信息存入注册中心.

  • 消费者启动时,从注册中心订阅提供者的信息

  • 消费者通过获取的提供者信息进行调用

    • 如果监控中心(Monitor)发现 服务提供者变更了信息(端口),注册中心就会通知调用者

  1. 服务容器负责启动,加载,运行服务提供者。

  2. 服务提供者在启动时,向注册中心注册自己提供的服务。

  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。

  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

4.Dubbo入门案例流程:

目录结构:

order-service:服务消费者

user-service:提供者

dubbo-admin:公用信息(实体类)

dubbo-api:调用服务的方法

服务消费者yml

 server:
   port: 8080
 spring:
   datasource:
     url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
     username: root
     password: root
     driver-class-name: com.mysql.jdbc.Driver
   application:
     name: order-service
     cloud:
       nacos:
         discovery:
           server-addr: localhost:8848
   #配置dubbo,注册中心,暴露的端口和协议,dubbo注解的包扫描
 dubbo:
   registry:
     address: spring-cloud://localhost   #使用SpringCloud中的注册中心
   scan:
     base-packages: cn.hmc.order.service  #dubbo中包扫描
   consumer:
     check: false   #dubbo默认有启动检查
     retries: 0     #dubbo内置的重试机制

服务提供者yml

 server:
   port: 8081
 spring:
   datasource:
     url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
     username: root
     password: root
     driver-class-name: com.mysql.jdbc.Driver
   application:
     name: user-service
     cloud:
       nacos:
         discovery:
           server-addr: localhost:8848
   #配置dubbo,注册中心,暴露的端口和协议,dubbo注解的包扫描
 dubbo:
   protocol:
     name: dubbo
     port: 20881
   registry:
     address: spring-cloud://localhost   #使用SpringCloud中的注册中心
   scan:
     base-packages: cn.hmc.user.service  #dubbo中包扫描

将方法注册到dubbo中,使用@DubboService注解

从dubbo中调用服务,使用@DubboReference注解

导入的依赖

  <!--nacos注册中心的依赖-->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
 ​
         <!--springcloud alibaba dubbo依赖   -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-dubbo</artifactId>
         </dependency>

总结:

5.Dubbo高级特性

1.启动检查

  • 什么是启动检查

    • 为了保障服务的正常可用,Dubbo默认会在启动时检查依赖的服务是否可用,不可用时会抛出异常

    • 正式环境可以保证整个调用链路的平稳运行.

    • 开发时往往会存在没有提供者的情况,由于启动检查的原因,可能导致开发测试出现问题

  • 关闭启动检查

    • 在消费端注解上添加@DubboReference(check=false)对当前消费者生效

    • 在配置文件中配置

    •  dubbo:
         registry:
           address: nacos://127.0.0.1:8848
         consumer:
           check: false

2.多版本检查

  • 实际场景有哪些?

    • 灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能

    • 版本兼容:新版本发布时,还未升级版本的用户还需要使用老版本

  • 如何支持多版本

    • Dubbo服务提供方指定新老服务版本:

    • @DubboService(version = “2.0.0”)

    • Dubbo服务消费方指定消费服务的版本:

    • @DubboReference(version = "2.0.0")

3.超时与重试

  • 什么时候会造成超时?

    • 消费方在调用服务提供方是发生了阻塞, 等待的情形,这个时候,服务消费方会一直等待下去

    • 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩,所以需要有超时即结束当前请求的机制

  • 什么时候需要重试?

    • 如果当前请求失败,大部分时候需要自动的进行再次尝试,而dubbo也是支持的。

  • 超时和重试默认配置是什么?

    • 超时默认配置是 1秒

    • 重试默认配置是2次

  • 如何配置超时与重试?

    • 使用注解

    • @DubboReference(timeout = 30000,retries=4)

    • 配置文件

    •  消费端
       dubbo:
         registry:
           address: nacos://127.0.0.1:8848
         consumer:
           timeout: 3000
           retries: 0
  • 备注以上超时与重试配置也可通过在服务提供方指定,但是消费方优先级大于服务提供方

  • 消费方注解 > 消费方文件配置 > 服务方注解 > 服务方文件配置

4.负载均衡

  • 什么是dubbo负载均衡

    • 集群部署时,客户端该调用哪一台机器上提供的服务呢? 如果全部都是调用其中一台肯定是不合理的

      Dubbo提供了4种负载均衡策略,帮助消费者找到最优提供者并调用

  • dubbo提供了哪几种负载均衡策略

    • random :按权重随机,默认值。按权重设置随机概率。

    • roundRobin :按权重进行轮询调用。

    • leastActive:最少活跃调用数,Dubbo认为活跃度最小的性能会更高,而相同活跃数进行随机调用。

    • consistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。

  • 如何配置负载均衡

    • 1).通过在注解

    •  @RestController
       @RequestMapping("/user")
       public class UserController {
           //引用远程服务
           @DubboReference(loadbalance = "roundrobin")
           private UserService userService;
       }
    • 2).通过在配置文件中指定

    •  dubbo:
         registry:
           address: nacos://127.0.0.1:8848
         consumer:
           loadbalance: random 
  • 备注以上负载均衡配置也可通过在服务提供方指定,但是消费方优先级大于服务提供方

  • 消费方注解 > 消费方文件配置 > 服务方注解 > 服务方文件配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值