dubbo知识点总结

Dubbo

一、架构讲解

  • 架构图

在这里插入图片描述

  • 虚线和实线的意义:虚线表示异步,不阻塞线程且性能高;实线表示同步阻塞。
  • Provider:服务提供者。暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
  • Registry:注册中心。用于放置所有Provider对外提供的信息。
  • Consumer:服务消费者。服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • Monitor:监控中心。监控Provider的压力情况等。每隔1分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。

二、Dubbo项目

此项目是一个maven架构项目

  • 父项目中导入依赖
<modules>
    <module>dubbo_api</module>
    <module>dubbo_provider</module>
    <module>dubbo_consumer</module>
</modules>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.7.RELEASE</version>
</parent>
  • 服务端和消费端都需要使用接口

    注意:将这个接口写到一个单独的项目中,方便解耦

public interface DemoDubboService {
    String sayHello(String name);
}
  • 服务端代码

    注意:在启动类中要加入@EnableDubbo

导入依赖:

<dependencies>
    <!--依赖dubbo_api 为了实现接口-->
    <dependency>
        <groupId>com.jutixueyuan</groupId>
        <artifactId>dubbo_api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <!--dubbo的服务的提供者需要有spring的容器支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!--加入dubbo的依赖-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.7</version>
    </dependency>
    <!--加入dubbo的注册中心的依赖-->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.3.0</version>
    </dependency>
</dependencies>

application.yml文件:

dubbo:
  #dubbo的协议(都是默认值可以不写)
  protocol:
    name: dubbo
    port: 20881
  #配置注册中心
  registry:
    address: zookeeper://192.168.10.11:2181
    timeout: 30000
  #配置应用的名称(dubbo要求每一个dubbo的应用必须要有一个应用名称)
  application:
    name: demo-provider

主要代码:

@DubboService(loadbalance = "roundrobin") // 负载均衡
public class DemoDubboServiceImpl implements DemoDubboService {
    @Override
    public String sayHello(String name) {
        System.out.println("我被调用了....");
        return "你好:"+name;
    }
}
  • 消费端代码

导入依赖:

<dependencies>
    <!--dubbo_api依赖-->
    <dependency>
    <groupId>com.jutixueyuan</groupId>
    <artifactId>dubbo_api</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--加入web启动器-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--加入dubbo的依赖-->
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.7</version>
    </dependency>
    <!--zk的依赖-->
    <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.3.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.3.0</version>
    </dependency>
</dependencies>

application.yml文件:

dubbo:
  #配置注册中心
  registry:
    address: zookeeper://192.168.10.11:2181
    timeout: 30000
  #配置应用的名称(dubbo要求每一个dubbo的应用必须要有一个应用名称)
  application:
    name: demo-consumer

主要实现代码:

controller层:

@Controller
public class DemoController {

    @Autowired
    private DemoService demoService;

    @RequestMapping("/hello")
    @ResponseBody
    public String getHello(String name){
        return demoService.getHello(name);
    }

}

service层:

@Service
public class DemoServiceImpl implements DemoService {
    @DubboReference
    private DemoDubboService demoDubboService;
    @Override
    public String getHello(String name) {
        return demoDubboService.sayHello(name);
    }
}

三、负载均衡

  • 集群概念:一个内容,部署多次,形成的整体称为集群。集群中每个个体应该部署到不同的服务器上。
  • 伪集群:集群中内容部署到同一台服务器上,通过不同端口区分不同个体。

注意:负载均衡是在集群的前提下

  • Dubbo内置的四个负载均衡策略:

    • Random:

      随机策略。随机访问集群中节点。访问概率与权重有关。

      @DubboService(loadbalance = "random")
      public class DemoDubboServiceImpl implements DemoDubboService 
      
    • RoundRobin:

      轮询策略。按公约后的权重设置轮循比率。 存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

      @DubboService(loadbalance = "roundrobin" weight=4)
      public class DemoDubboServiceImpl implements DemoDubboService 
      
    • LeastActive:

      最少活跃调用数策略。相同活跃数的随机,活跃数指调用前后计数差。 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

    • ConsistentHash:

      一致性Hash策略。相同参数的请求总是发到一个提供者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值