• 详细Dubbo 微服务+zookeeper分享,一看就懂(附实例代码)


    目录

     一、dubbo 简要概念

    二、使用dubbo 准备

    三、dubbo 微服务调用搭建

    四、 dubbo与springCloud 对比

    五、相关附件

    源码实例:https://files.cnblogs.com/files/liyanbofly/hualaladubbo.rar?t=1658644883

    一、dubbo 简要概念

    Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

    官网地址:http://dubbo.apache.org/

     

    Container:服务运行容器  dubbo启动服务之容器(Container)_cjrjc的博客-CSDN博客_dubbo的container

    Monitor:用来统计服务的调⽤次数和调⽤时间的监控中⼼。Dubbo-monitor简单介绍 - 简书 (jianshu.com)

    二、使用dubbo 准备

    2.1、Zookeper 按装

      将conf下的zoo_sample.cfg复制一份改名为zoo.cfg即可。

     注意几个重要位置:

      dataDir=./ 临时数据存储的目录(可写相对路径)

      clientPort=2181 zookeeper的端口号

      修改完成后再次启动zookeeper

    2.2、Zookeeper常用指令及问题

    ./zkServer.sh start 启动zookeeper

     ./zkCli.sh

    ./zkServer.sh status  (查看状态)

    ./zkServer.sh stop  (关闭)

    ./zkServer.sh start-foreground  (以打印日志方式启动)

     

    2.3 当zookeeper不能启动问题查看 zoo.cfg

      tmp/zookeeper/log

      tmp/zookeeper/data

      两个目录是否存在 如果不存在需要创建

     

    2.4 下载dubbo-admin  并按装用于监控和设置服务提供者、消费者; 需打包按装

         下载地址:https://github.com/apache/dubbo-admin/tree/master

    修改配置文件:dubbo.registry.address=zookeeper://192.168.88.129:2181 (zookeeper按装服务器地址)

    打包并java  -jar  xxxx.jar按装部署 (-D 设置相关虚拟机参数)

    Localhost:7001 访问 用户名:root 密码:root

     

     

    三、dubbo 微服务调用搭建

     

    1)、概述:Dubbo 实例分为三部分

    1.1接口模块 :为提供者服务和消费者服务提供接口定义

    1.2提供者服务 :hulaladubbo-customer服务提供实现供消费者供使用

    1.3消费者服务:hulaladubbo-order服务,提供订单服务并调用 hulaladubbo-customer服务

     

    2)、搭建例:

     pom文件节点说明

    1、 Zookeeper :用于注册中心使用

    2、 dubbo-spring-boot-starter :dubbo核心功能

    3、 curator-recipes:curator-recipes丰富了zookeeper应用场景的使用api封装

    、curator-framework、curator-x-discovery  服务与zookeeper注册及其它功能实现

    4、spring-cloud-starter-netflix-hystrix : 熔段降级方法

     

    3)、dubbo相关特性说明

    duboo  超时参数设置 、重试参数 、负载均衡、降级方法

    3.1 超时参数设置 、重试参数

    @DubboReference(timeout = 1000):设置请求服务超时间,超过时间就会抛异常

    @DubboReference(timeout = 1000,retries = 2): 重试次数,不包括第一次请求,如retries = 2,会请求3次

    @DubboReference(timeout = 1000,retries = 3):

    重试次数设置需考虑 幂等性接口和非幂等接口

    3.2 负载均衡

    @DubboReference(loadbalance = LoadbalanceRules.ROUND_ROBIN):

    loadbalance 负载均衡策略:

    1)、Random LoadBalance(随机,按照权重的设置随机概率)-- 默认

    2)、RoundRobinLoadBalance(轮询,按照权重设置轮询比率)

    3)、LeastActive LoadBalance(最少活跃数,响应快的提供者接受越多请求,响应慢的接受越少请求)

    4)、ConsistentHashLoadBalance(一致性Hash,相同参数的请求总是发到同一个服务提供者(相同参数默认是指请求的第一个参数)根据服务提供者ip设置hash环,携带相同的参数总是发送的同一个服务提供者,若服务挂了,则会基于虚拟节点平摊到其他提供者上

    3.3熔段降级

     1)加 pom节点:spring-cloud-starter-netflix-hystrix

    2)启动主类加@EnableHystrix

    3)加指定降级方法

     @HystrixCommand(fallbackMethod = "failFallBack")

      @Override

    public ResultVo<String> saveOrder(Orders orders) {

    }

    failFallBack 方法参数要与作用在saveOrder方法的参数和返回值相同

     如:

      /**

         * 降级方法处理

         * @param orders

         * @return

         */

        public ResultVo<String> failFallBack(Orders orders) {

        }

     

    3.4 cluster参数:集群容错)

    可选方式 failover/failfast/failsafe/failback/forking

    Failover Cluster(默认)

    失败自动切换,当出现失败,重试其它服务器 。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

    Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

    Failsafe Cluster

    失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

    Failback Cluster

    失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

    Forking Cluster

    并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

    3.5 相关配置也可以在application.yml 文件全局配置如下

    #  provider:

    #    timeout: #全局设置超时时间

    #     retries: #全局设置重试次数

    #     loadbalance: #全局设置负载均衡侧率

     

    ps:参数优先级

    方法级优先,接口级次之,全局配置再次之。

    如果级别一样,则消费方优先,提供方次之。

    四、 dubbo与springCloud 对比

    1)通信方式不同

    Dubbo 使用的是 RPC 通信,而 Spring Cloud 使用的是 HTTP RESTFul 方式。

    Dubbo底层是使用Netty这样的NIO框架,是基于TCP协议传输的,配合以Hession序列化完成RPC通信。而SpringCloud是基于Http协议+rest接口调用远程过程的通信,相对来说,Http请求会有更大的报文,占的带宽也会更多。

    2、产生背景不同

    Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理

    Spring Cloud 是微服务产务,SpirngCloud 定位为微服务架构下的一站式解决方案

    3、组件不同  

    演示操作

    1、演示 超时重试

    访问:localhost:8083/saveOrder

     查看控制台报错信息

    Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.dubbo.rpc.RpcException: Failed to invoke the method getCustomerById in the service com.hualala.api.ICustomerService. Tried 4 times of the providers [192.168.88.1:20884] (1/1) from the registry 192.168.88.129:2181 on the consumer 192.168.88.1 using the dubbo version 3.0.6. Last error is: Invoke remote method timeout. method: getCustomerById, provider: DefaultServiceInstance{serviceName='dubbo-customer3', host='192.168.88.1', port=20884, enabled=true, healthy=true, metadata={dubbo.endpoints=[{"port":20884,"protocol":"dubbo"}], dubbo.metadata-service.url-params={"connections":"1","version":"1.0.0","dubbo":"2.0.2","release":"3.0.6","port":"20884","protocol":"dubbo"}, dubbo.metadata.revision=caa4fc8f190d1f203610a9f4d3e3193d, dubbo.metadata.storage-type=local}},

     

    2、演示order服务调用 customer服务 内部负载均衡

    1)启动多个 customer服务,如果报错查看 第二个customer服务 dubboport 是否修改

    2)刷新:localhost:8083/saveOrder ,查看custName,端口改变

     

    3、Hystrix 降级方法执行

     刷新:localhost:8083/saveOrder,查看返回结果及降级方法结果

    执行结果:{"code":555,"msg":"我是降级方法","Data":null,"data":null}

     

    4、cluster:集群容错

    1)Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

    @DubboReference(timeout = 1000,cluster = "failfast")

    2) 查看返回报错信息没有

    Tried 4 times 相关重试请求

  • 相关阅读:
    SpringMVC学习笔记----常用注解
    python常用模块学习1
    python基础模块,包
    python-验证功能的装饰器示例
    python闭包及装饰器
    关于windows服务器配置
    python高阶函数
    python-生成器和迭代器
    linux--基础知识5
    python基础-文件操作的其他方法
  • 原文地址:https://www.cnblogs.com/liyanbofly/p/16514489.html
Copyright © 2020-2023  润新知