Dubbo的使用

Dubbo使用

文章目录

  • Dubbo使用
    • 架构图
    • Dubbo相关依赖
    • 服务的提供者
    • 服务消费者
    • 出现无法连接zookeeper的情况
    • dubbo的高级特性
      • dubbon-admin的安装
      • 序列化
      • 地址缓存
      • dubbo高级特性——超时与重试
      • dubbon高级特性——多版本
      • Dubbo高级特性——负载均衡
      • Dubbo高级特性——集群容错
      • 服务降级

对于文章中不清楚的,建议查看官网信息

架构图

Dubbo的使用_第1张图片

Dubbo相关依赖

<dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubboartifactId>
            <version>2.7.5version>
            
        dependency>
        
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-dependencies-zookeeperartifactId>
            <version>2.7.5version>
            
            <type>pomtype>
        dependency>

注意:在使用的过程中,dubbo与zookeeper的依赖需要与springboot版本号一样

服务的提供者

  • 需要定义service层的接口
public interface TestService {

    public  String test01();
}
  • 实现类
package com.lmx.service;

import org.apache.dubbo.config.annotation.Service;

@Service
public class TestServiceImpl implements TestService {
    @Override
    public String test01() {
        return "priverder";
//        return null;
    }
}

注意:在案例中的@service注解是dubbo的注解,不是springboot自身的service注解

服务消费者

  • 搭建controller层
package com.lmx.web;


import com.lmx.service.TestService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestCotroller {

    @Reference
    private TestService testService;


    @GetMapping("/savehello")
    public String sayhello() {
        return testService.test01();
    }


}

通过@Refrence注解远程注入service层对象,@Refrence注解同样也是dubbo定义的注解

  • 为通过编译,需要在消费者定义与提供者服务相同包下的接口
package com.lmx.service;

public interface TestService {
    String test01();
}

正确的做法是,将共有的接口抽象到新的maven项目中,供两个消费者服务与提供者服务相同

出现无法连接zookeeper的情况

  • 情况说明:昨天可以连接,第二天晚上突然无法连接
  • 处理办法:延长zookeeper的最大连接时间,默认值是5秒,延长至10秒,单位是毫秒
dubbo:
  application:
    name: dubbo-springboot-demo-constomer
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-registry
    timeout: 10000
    address: zookeeper://192.168.253.128:2181
  config-center:
    timeout: 10000
    address: zookeeper://192.168.253.128:2181
  metadata-report:
    timeout: 10000
    address: zookeeper://192.168.253.128:2181

Dubbo的使用_第2张图片

dubbo的高级特性

dubbon-admin的安装

Dubbo的使用_第3张图片

  • 需要下载node.js
  • 需要配置mavne
  • 使用mvn clean package命令打包项目(在.mvn文件所在目录下)
  • Dubbo的使用_第4张图片

序列化

Dubbo的使用_第5张图片

  • 在dubbo两台机器之间使用公共的mavne项目来管理接口与pojo类,且pojo类上需要实现Serializable接口,其他的交由dubbo内部管理,在public公共类中,提供公共类


public class User implements Serializable {
    private int id;
    private String name;
    private int age;



地址缓存

Dubbo的使用_第6张图片

dubbo高级特性——超时与重试

Dubbo的使用_第7张图片

  • 在提供者配置@Service(timeout = 3000, retries = 0),retries设置重试的次数

@Service(timeout = 3000, retries = 0)//连接时间为3秒,连接失败后,不进行重试
public class TestServiceImpl implements TestService {
    @Override
    public String test01() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "priverder";
//        return null;
    }
}
  • 在消费者配置,消费者的配置会覆盖提供者端的配置@Reference(timeout = 1000)

@Reference(timeout = 1000,retries = 2)
    private TestService testService;
    @GetMapping("/savehello")
    public String sayhello() {
        new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                int i=0;
                while (true){
                    Thread.sleep(1000);
                    System.out.println(i+++"秒");
                }
            }
        }).start();
        return testService.test01();
    }

注意:在开发过程中,需要将超时设置配置在提供者服务

dubbon高级特性——多版本

Dubbo的使用_第8张图片

  • 在提供者与消费者同时提供version属性,
  • 在启动微服务时需要现将提供者启动,然后在启动消费者,否则容易报错
@Reference(version = "2.0")
@Service(timeout = 3000, retries = 0,version = "1.0")//连接时间为3秒,连接失败后,不进行重试
@Service(timeout = 3000, retries = 0,version = "2.0")//连接时间为3秒,连接失败后,不进行重试

Dubbo高级特性——负载均衡

Dubbo的使用_第9张图片

  • 默认是随机算法,提供者可以通过为weight属性指定权重
 @Reference(version = "2.0",loadbalance = "random")
 

注:双击shift键可以弹出类搜索界面,点击ctrl+h键可以查看当前文件类的继承关系

Dubbo高级特性——集群容错

Dubbo的使用_第10张图片

  • 通过在@Reference(version =“ r e f r e n c e . v e r s i o n " , l o a d b a l a n c e = " {refrence.version}",loadbalance = " refrence.version",loadbalance="{refrence.loadbalance}”,cluster = “failover”)配置cluster 属性即可实现

服务降级

Dubbo的使用_第11张图片

  • 配置服务降级类,实现TestService接口
@Reference(version ="${refrence.version}",loadbalance = "${refrence.loadbalance}",
            cluster = "failover",mock = "com.lmx.service.TestMock")

你可能感兴趣的:(dubbo,java-zookeeper,zookeeper)