Dubbo直连详解

一、Dubbo直连模式

在Dubbo中,一个节点可以作为服务提供者、消费者或者注册中心。默认情况下,Dubbo的消费者会向注册中心订阅服务提供者地址,在消费者发起调用时,Dubbo会通过注册中心获取服务提供者的地址并进行调用。而Dubbo直连模式则是一种在消费者端直接指定服务提供者地址的方式,绕过注册中心直接与服务提供者通信。

使用Dubbo直连模式可以避免服务提供者注册中心故障影响客户端调用,同时也可以降低系统负担。

二、Dubbo直连与ZooKeeper区别

Dubbo直连和ZooKeeper是两种不同的Dubbo服务消费方式,Dubbo直连是在消费端直接指定服务提供方的ip地址,绕过注册中心直接与服务提供方建立连接。而ZooKeeper则是通过Dubbo注册中心来管理服务提供者的地址信息,并由调用方向ZooKeeper注册中心请求服务提供者地址。

三、Dubbo直连方式

Dubbo直连有两种方式:

  1. 使用点分隔符指定服务提供方的ip:port
  2.    
       reference:
        id: demoService
        url: dubbo://192.168.0.101:20880
        interface: com.demo.interfaces.DemoService
       
       

    以上代码指定了DemoService服务的提供方ip地址为192.168.0.101和端口号为20880。在Dubbo直连模式下,消费端不再向注册中心订阅DemoService服务的提供方地址信息,此时只有192.168.0.101:20880可提供DemoService服务。

  3. 使用registry协议指定服务提供方地址
  4.    
       reference:
         id: demoService
         url: registry://192.168.0.101:2181/com.alibaba.dubbo.registry.RegistryService?registry=zookeeper
         interface: com.demo.interfaces.DemoService
       
       

    以上代码使用registry协议指定了ZooKeeper的地址为192.168.0.101:2181,将注册中心的地址作为参数传给Dubbo调用,然后通过zookeeper协议指定DemoService服务的提供者地址。

四、Dubbo直连调用

Dubbo在消费者端使用直连方式调用服务提供者,与使用注册中心的方式一样,要先创建引用。


  // 服务引用配置
  ReferenceConfig reference = new ReferenceConfig();
  reference.setInterface(xxxService.class);
  reference.setUrl("dubbo://{host}:{port}");
  // 创建引用实例
  xxxService service = reference.get();
  result = service.invokeMethod();

在代码中,我们可以通过ReferenceConfig的setUrl方法指定服务提供者的URL地址,然后通过调用get方法来获取服务实例,然后就可以使用服务的方法进行调用了。

五、Dubbo直连重试

在Dubbo直连模式下,如果服务提供者宕机,消费者会直接失败。因此,Dubbo直连提供了重试机制,可以在服务调用失败后进行重试。

使用Dubbo直连重试机制,需要在reference配置中添加retries字段:


reference.setRetries(3);

以上代码指定了Dubbo直连调用失败后重试3次。对于一些业务场景比较复杂的应用,直连机制下的重试机制可以减少请求失败次数,提高应用的可用性。

六、Dubbo直连本地

Dubbo直连可以将服务提供者直接单独部署在一个服务节点中,这样可以极大地提高服务的响应速度。Dubbo还提供了本地直连模式,可以在同一台机器上的服务中使用Dubbo直连机制,可以避免Dubbo通过网络延迟传输Dubbo协议,从而提高系统的性能表现。

使用Dubbo本地直连方式,需要在服务提供方的dubbo.properties中配置local.only=true,然后再服务消费方的ReferenceConfig中配置url=”dubbo://127.0.0.1:20880″,将服务提供者地址指定为本地IP地址即可。

七、Dubbo直连的URL

Dubbo直连允许使用不同的URL进行调用逻辑处理,可以在URL中添加一些参数和属性。URL协议格式为:

dubbo://<host>:<port>/<path>?<param1>=<value1>&<param2>=<value2>&…

  • host:服务提供者的IP地址或主机名
  • port:服务提供者的端口号
  • path:对应的实现类接口名
  • param:一些可选参数

八、Dubbo直连version

在Dubbo中,每个服务的实现都有一个版本号。使用Dubbo直连方式调用服务,需要在消费端手动指定版本号。


  // 指定服务版本号
  reference.setVersion("1.0.0");

九、Dubbo直连和使用ZooKeeper的区别

使用Dubbo直连,可以直接指定服务提供者的地址,绕过注册中心直接进行服务调用。而使用ZooKeeper注册中心,Dubbo会通过ZooKeeper获取服务提供方地址信息,在调用时使用负载均衡算法进行调用。

在使用Dubbo直连的情况下,需要保证服务提供者和消费者都处于同一网络环境中。

以上是关于Dubbo直连的详解,这里是代码示例:

代码示例

  1. Dubbo直连方式
  2.    
        reference:
          id: demoService
          url: dubbo://192.168.0.101:20880
          interface: com.demo.interfaces.DemoService
       
       
  3. Dubbo直连调用
  4.    
        // 服务引用配置
        ReferenceConfig reference = new ReferenceConfig();
        reference.setInterface(xxxService.class);
        reference.setUrl("dubbo://{host}:{port}");
        // 创建引用实例
        xxxService service = reference.get();
        result = service.invokeMethod();
       
       
  5. Dubbo直连重试
  6.    
        reference.setRetries(3);
       
       
  7. Dubbo直连本地
  8.    
       reference:
          id: demoService
          url: dubbo://127.0.0.1:20880
          interface: com.demo.interfaces.DemoService
       
       
  9. Dubbo直连的URL
  10.    
        dubbo://192.168.0.101:20880/com.demo.interfaces.DemoService?version=1.0.0
       
       
  11. Dubbo直连version
  12.    
        reference.setVersion("1.0.0");
       
       

原创文章,作者:SOTJC,如若转载,请注明出处:https://www.506064.com/n/334906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SOTJCSOTJC
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论