• spring boot集成dubbo(从0到1)


    1.安装注册中心zookeeper(Linux远程安装)(依赖java环境)

        下载地址:Index of /apache/zookeeper/zookeeper-3.6.3 (bfsu.edu.cn)

        上传到opt/zookeeper目录

    1. # 1
    2. cd /opt
    3. # 2 创建目录
    4. mkdir zookeeper
    5. # 3 解压
    6. tar -zxvf xxxx
    7. # 4
    8. cd apache-zookeeper-3.6.3-bin/
    9. # 5 配置
    10. cd conf
    11. # 6 复制文件 zoo.cfg 才能生效
    12. cp zoo_sample.cfg zoo.cfg
    13. # 7 更改目录配置
    14. vim zoo.cfg

    1. # 8 退出保存
    2. esc + wq!
    3. # 9 创建刚刚那个目录用于保存数据
    4. mkdir /opt/zookeeper/zkdata
    5. # 10 进入bin目录
    6. cd /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin
    7. # 11 启动
    8. ./zkServer.sh start
    9. # 12 停止
    10. ./zkServer.sh stop
    11. # 13 查看状态
    12. ./zkServer.sh status

     启动完成记得放行2181 8222 8333端口,如果放行端口后依旧报错使用firewalld-cmd reload 重刷防火墙规则

    2.创建dubbo模块(包名一定要一致)

    父模块

    导入依赖

    1. <parent>
    2. <artifactId>spring-boot-starter-parentartifactId>
    3. <groupId>org.springframework.bootgroupId>
    4. <version>2.2.1.RELEASEversion>
    5. parent>
    6. <dependencyManagement>
    7. <dependencies>
    8. <dependency>
    9. <groupId>org.apache.dubbogroupId>
    10. <artifactId>dubbo-spring-boot-starterartifactId>
    11. <version>2.7.3version>
    12. dependency>
    13. dependencies>
    14. dependencyManagement>

    api接口模块

    创建一个普通service测试接口

    public interface HelloService {
        void sayHello(String name);
    }

    提供者模块

    依赖以及配置

    1. <dependency>
    2. <groupId>org.examplegroupId>
    3. <artifactId>dubbo-apiartifactId>
    4. <version>1.0-SNAPSHOTversion>
    5. dependency>
    6. <dependency>
    7. <groupId>org.springframework.bootgroupId>
    8. <artifactId>spring-boot-starter-webartifactId>
    9. dependency>
    10. <dependency>
    11. <groupId>org.apache.dubbogroupId>
    12. <artifactId>dubbo-spring-boot-starterartifactId>
    13. dependency>
    14. <dependency>
    15. <groupId>org.apache.curatorgroupId>
    16. <artifactId>curator-frameworkartifactId>
    17. <version>2.12.0version>
    18. dependency>
    19. <dependency>
    20. <groupId>org.apache.curatorgroupId>
    21. <artifactId>curator-recipesartifactId>
    22. <version>2.12.0version>
    23. dependency>
    1. server:
    2. port: 8081
    3. dubbo:
    4. application:
    5. name: provider
    6. registry:
    7. address: zookeeper://124.223.93.49:2181 #服务地址
    8. protocol:
    9. name: dubbo
    10. port: 20880
    11. #提供服务类实现的包
    12. scan:
    13. base-packages: com.dubbo.provider.service #扫包

    消费者模块和生产者一致 但是不用配置扫包

    3.编写提供者提供服务的实现以及消费者如何远程调用的

    提供者

    1. import org.apache.dubbo.config.annotation.Service;
    2. @Service
    3. public class HelloServiceImp implements HelloService {
    4. @Override
    5. public void sayHello(String name) {
    6. System.out.println("hello+"+name+"!");
    7. }
    8. }

    消费者

    1. import org.apache.dubbo.config.annotation.Reference;
    2. import org.springframework.stereotype.Service;
    3. @Service
    4. public class ProvideServiceImp implements ProviderService {
    5. @Reference
    6. private HelloService helloService;
    7. @Override
    8. public void providerTest() {
    9. helloService.sayHello("xzh");
    10. }
    11. }

    效果就是调用消费者 会发现生产者确实被调用 自此学习成功。

    4.dubbo的几种高级特性

    地址缓存

    1. 定义:

      升访问速度,提升用户体验

    2. 原理

      • dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
      • 一旦当服务提供者地址发生变化时,注册中心会通知服务消费者。
    3. 使用

      自动使用,无需操作。

    超时与重试 

    @Service(timeout = 1000,retries = 2)

    为了解决高可用,提高用户的体验,防止服务器宕机引发的雪崩效应。

    原理

    没有这个机制的话,当消费者调用提供者提供的服务时,如果发生阻塞,那么会一直等待,当请求越积越多,那么就会影发雪崩,造成服务器宕机。至于重试就是当连接不成功时,消费者的执行策略,如一直重试等。

    使用

    在@Server与@Reference注解中配置,消费者配置能够容忍的超时时间,提供者配置正常执行大致所需时间。

    多版本   

    灰度发布 

    @Service(version = "1.1")
    public class HelloServiceImp implements HelloService {
        @Override
        public void sayHello(String name) {
            System.out.println("hello+"+name+"!");
        }
    }

    拷贝一份

    @Service(version = "1.2")
    public class HelloServiceImp2 implements HelloService {
        @Override
        public void sayHello(String name) {
            System.out.println("hello+"+name+"!");
        }
    }

    负载均衡

    @Reference(loadbalance = "random")
    1. 定义

      为了控制集群中每台服务器的压力,达到合理分配请求的方式。

    2. 原理

      因为集群中每台服务器配置的项目都是一样的,所有在访问的时候,如果全部请求都往一台服务器请求,那么就有可能造成服务器压力过大,造成宕机。 

    集群容错  

         

    @Reference(cluster = "failover")
    1. 定义

      在集群的前提下,当服务消费者调用提供者的服务失败的时候,消费者的执行策略。

    2. 目的

      为了提高可用性以及用户的体验性。

    3. 集群容错模式

      Failover Cluster

      失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作

      Failfast Cluster

      快速失败,只发起一次调用,失败立即报错。通常用于写操作

      Failsafe Cluster

      失败安全,出现异常时,直接忽略。返回一个空结果。

      Failback Cluster

    服务降级

    定义 

    可以通过服务降级功能临时屏蔽某个出错的非关键服务,或者屏蔽非核心服务,让服务器资源全力维持核心服务,并定义降级后的返回策略。

    目的

    能够控制服务器的资源分配,或者当某个服务出现紧急异常时,需要屏蔽用户发起的请求。

    使用

    在服务消费方的@Reference中配置使用。

    两种降级配置

    mock=force:return null

    表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。

    mock=fail:return null

    表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

  • 相关阅读:
    网络协议层次模型
    从文件里一次读取一行
    聚苯乙烯-二乙烯基苯-甲基丙烯酸缩水甘油酯(PS-GMA)微球/聚吡咯复合微球的性能
    第二章、dubbo 框架(dubbo 服务化最佳实践)
    MMU如何通过虚拟地址找到物理地址?
    [兔子私房课]MybatisPlus开发详解与项目实战01
    Oracle SQL基础
    Redis基础学习
    微软出品自动化神器Playwright,不用写一行代码(Playwright+Java)系列(二) 之脚本的录制及调试详解
    【Matlab】蒙特卡罗法模拟圆周率+对应解析的GIF生成【超详细的注释和解释】
  • 原文地址:https://blog.csdn.net/qq_50598935/article/details/126003081