当前位置:   article > 正文

Dubbo常见用法_dubbo @method

dubbo @method

Dubbo

Dubbo官方地址:https://dubbo.apache.org/zh/docs/quick-start/

Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,并提供了三大核心能力:面向接口的远程方法调用智能容错和负载均衡,以及服务自动注册和发现

简单来说就是一个管理微服务的框架,只有在分布式框架的时候才会使用,本质上就是一个做服务调用的框架,告别Web Service模式中的WSdl,以服务者与消费者的方式通过Dubbo进行调用注册。

RPC:全称Remote Procedure Call, 即远程过程调用;主要作用是屏蔽网络编程细节,实现调用远程方法就像调用本地方法(同一个进程中的方法)一样的体验。同时屏蔽底层网络通信的复杂性,让我们更加专注业务逻辑的开发。

SOA:是一种思想,一种方法论,一种分布式的服务架构,解决了多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时SOA又有一个名字,叫做服务治理。

Dubbo的流程

Provider:服务提供者

Register:注册中心(Eureka、Consul、Zookeeper)

Consumer:消费者,调用服务方

Monitor:监控,Provider和Consumer 用异步的方式发送信息至Monitor,可以将服务调用信息保存至本地,需要单独配置,若果宕机不会影响服务调用

调用顺序:
在这里插入图片描述

  1. 首先启动注册中心。
  2. 启动服务提供者,服务提供者将自身的ip、端口以及暴露的接口注册到注册中心(如果发生更改将会在将信息自动注册到注册中心)。
  3. 启动服务消费者,消费者将自身的信息注册到注册中心(通过配置可关闭)同时拉取提供者的信息进行保存,(如果提供者的信息发生改变,注册中心将会通知消费者进行更改)
  4. 消费者在拿到提供者的信息之后,如果需要调用接口,将不通过注册中心直接调用提供者。
  5. 消费者和提供者通过异步的方式发送消息至Monitor,Consumer和Provider会将信息存放在本地磁盘,平均1min会发送一次信息。

怎么使用Dubbo?

Dubbo源码地址: git clone https://github.com/apache/dubbo.git

Dubbo支持多种开发模式:xml,注解,与SpringBoot整合

SpringBoot 整合模式

服务提供者

  1. 需要引入spring boot dubbo 启动器
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.8</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 需要在配置类中标明注册中心的地址、服务的通信方式、Dubbo对外暴露的端口号、以及需要扫描的包名
dubbo:
  scan:
    # 包名根据自己的实际情况写
    base-packages: com.dubbo.service
  protocol:
    # 用于消费者调用的端口号 
    port: 20880
    # 消费者调用的通信协议
    name: dubbo
  registry:
    #zookeeper注册中心地址
    address: zookeeper://192.168.0.107:*
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. 将需要对外暴露的接口实现类加上注解@DubboService

// 该实现类的方法将对外提供
@DubboService
public OrderServiceImpl implements OrderService {
    
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

服务消费者

  1. pom 以及 yml 文件配置和服务提供者的相同。

  2. 在远程调用时需要在调用的接口上使用注解@DubboReference

@Controller
public class OrderController {

    // 该接口将使用远程调用
    @DubboReference
    private OrderService orderService;
    
    public String getOrder (Long orderId) {
        orderService.getOrderById(orderId);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

配置的优先级

  1. jvm 启动配置
-Ddubbo.timeout=4000
  • 1
  1. 外部配置中心

  2. 自身程序中方法上的注解

@DubboService(methods = {
        @Method(name = "getOrder",timeout = 3500)
})
4. 自身程序中接口上的注解
```java
@DubboService(timeout=2000)
public class OrderService{
    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 自身程序中的配置文件(yml)
dubbo:
    timeout:3000
  • 1
  • 2
  1. Dubbo默认配置文件dubbo.propertise
dubbo.timeout=1000
  • 1

高级用法

启动时检查

在消费者启动时,会去检查依赖的是否可以使用,如果不是可以使用将会不会正常启动

可以通过 check=“false” 来关闭启动时检查

集群容错措施

集群容错

可以通过cluster进行配置

Failover Cluster(失败重试)

当请求失败的时候将自动切换到其他服务器进行请求,但重试会延迟反应时间,不建议设置过多,失败重试为缺省设置,重试次数为2次,也就是当请求失败时一共访问三次服务。

可以通过 retries=“*” 来配置重试次数

Failfast Cluster(快速失败)

当请求失败时,直接结束并抛出异常,通常适用在写入、保存操作。

Failsafe Cluster(失败安全)

当请求失败时,不会抛出异常。

Failback Cluster(失败自动恢复)

当请求失败时,后台会自动记录,并定时重发,通常用在发送短信、邮件业务,不关心返回结果的业务。

Failback Cluster(并行调用多个服务器)

同时向多个服务器发出请求,只有一个返回数据即可,通常用于实时性要求较高的读操作,会消耗大量资源。

Broadcast Cluste(广播调用所有提供者)
逐个调用所有提供者,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

负载均衡

可以通过loadbalance进行配置

Random 加权随机

默认算法,默认权重相同

RoundRobin 加权轮询

按公约后的权重设置轮询比率,循环调用节点

RoundRobin 加权最少活跃调用优先

活跃数越低,越优先调用,相同活跃数的进行加权随机。活跃数指调用前后计数差(针对特定提供者:请求发送数 - 响应返回数),表示特定提供者的任务堆积量,活跃数越低,代表该提供者处理能力越强。

ShortestResponse 加权最短响应优先

在最近一个滑动窗口中,响应时间越短,越优先调用。相同响应时间的进行加权随机。

ConsistentHash 一致性 Hash

相同参数的请求总是发到同一提供者。

服务分组

当一个接口有多种实现时,可以用 group 区分

多版本

可以通过version熟悉进行配置

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。

可以按照以下的步骤进行版本迁移:

  1. 在低压力时间段,先升级一半提供者为新版本
    2.再将所有消费者升级为新版本
    3.然后将剩下的一半提供者升级为新版本
本地存根

可在消费者方 使用 stub 属性来配置
在服务提供者方实现,在调用接口前后进行拦截。

本地伪装

可在消费者方 使用 mock 属性来配置

在服务提供者方实现,调用接口后抛出了RPCException 异常是,进入本地伪装方法,优先级高于本地存根。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/165858
推荐阅读
相关标签
  

闽ICP备14008679号