当前位置: 代码网 > it编程>编程语言>Asp.net > Dubbo注册中心与服务发现详解

Dubbo注册中心与服务发现详解

2025年10月20日 Asp.net 我要评论
注册中心与服务发现注册中心概述注册中心是dubbo服务治理的核心组件,dubbo依赖注册中心的协调实现服务发现,自动化的服务发现是微服务实现动态扩容、负载均衡、流量治理的基础。dubbo的服务发现机制

注册中心与服务发现

注册中心概述

注册中心是dubbo服务治理的核心组件,dubbo依赖注册中心的协调实现服务发现,自动化的服务发现是微服务实现动态扩容、负载均衡、流量治理的基础。

dubbo的服务发现机制经历了dubbo2时代的接口级服务发现、dubbo3时代的应用级服务发现。

基本使用

springboot开发:在application.yaml中添加registry配置

dubbo:
  registry:
    address: { protocol }://${cluster-address}
  • protocol:配置中心类型
  • cluster-address:注册中心的集群地址,比如address: nacos://127.0.0.1:8848,如需要集群格式地址可使用backup参数:address: nacos://localhost:8848?backup=localshot:8846,localshot:8847

配置中心与元数据中心

配置中心、元数据中心是实现dubbo高阶服务治理能力会依赖的组件,如流量管控规则等。

相比于注册中心,这两个组件的配置是可选的。

对于部分注册中心类型(如zookeeper、nacos等),dubbo会默认同时将其用作元数据中心和配置中心(建议保持默认开启状态)。

dubbo:
  registry:
    address: nacos://127.0.0.1:8848

dubbo解析后的默认行为:

dubbo:
 registry:
  address: nacos://localhost:8848
 config-center:
  address: nacos://localhost:8848
 metadata-report:
  address: nacos://localhost:8848

如果不想使用nacos作为配置中心,可以通过一下两个参数来调整默认行为:

dubbo:
 registry:
  address: nacos://localhost:8848
  use-as-config-center: false
  use-as-metadata-report: false
 config-center:
   address: apollo://localhost:8848

zookeeper 注册中心

基本配置

maven依赖

<dependency>
    <groupid>org.apache.dubbo</groupid>
    <artifactid>dubbo-spring-boot-starter</artifactid>
    <version>${dubbo.version}</version>
</dependency>
<!-- 推荐 zookeeper server 3.8.0+ 版本 -->
<dependency>
    <groupid>org.apache.dubbo</groupid>
    <artifactid>dubbo-zookeeper-curator5-spring-boot-starter</artifactid>
    <version>${dubbo.version}</version>
</dependency>
<!-- 仅当 zookeeper server 版本是 3.4.x 及以下时,使用此依赖
<dependency>
    <groupid>org.apache.dubbo</groupid>
    <artifactid>dubbo-zookeeper-spring-boot-starter</artifactid>
    <version>${dubbo.version}</version>
</dependency>
-->

非springboot项目

<dependencies>
   <dependency>
      <groupid>org.apache.dubbo</groupid>
       <version>${dubbo.version}</version>
       <artifactid>dubbo</artifactid>
   </dependency>
   <!-- this dependency helps to introduce curator and zookeeper dependencies that are necessary for dubbo to work with zookeeper as transitive dependencies. -->
   <!-- 仅当 zookeeper server 版本是 3.4.x 及以下时,使用此依赖 -->
   <dependency>
       <groupid>org.apache.dubbo</groupid>
       <artifactid>dubbo-dependencies-zookeeper</artifactid>
       <version>${dubbo.version}</version>
       <type>pom</type>
   </dependency>
   <!-- 仅当 zookeeper server 版本是 3.5.x 及以上时,使用此依赖
	<dependency>
		<groupid>org.apache.dubbo</groupid>
		<artifactid>dubbo-dependencies-zookeeper-curator5</artifactid>
		<version>${dubbo.version}</version>
		<type>pom</type>
	</dependency>
	-->
</dependencies>

zookeeper版本选择

dubbo3 3.3 版本及以上

zookeeper server 版本dubbo依赖dubbo starter 依赖(springboot用户)
3.4.x 及以下dubbo-dependencies-zookeeperdubbo-zookeeper-spring-boot-starter
3.5.x 及以上dubbo-dependencies-zookeeper-curator5dubbo-zookeeper-curator5-spring-boot-starter

dubbo3 3.2 及以下、dubbo2 2.7.x

zookeeper server 版本dubbo依赖dubbo starter 依赖(springboot用户)
3.4.x 及以下dubbo-dependencies-zookeeper不支持(自行管理)
3.5.x 及以上不支持(自行管理)不支持(自行管理)

配置并启用zookeeper

# application.yml
dubbo:
 registry:
   address: zookeeper://localhost:2181

高级配置

认证与鉴权

如果zookeeper开启认证,

dubbo支持指定username、password的方式传入身份标识·。

# application.yml
dubbo:
 registry:
  address: zookeeper://localhost:2181
  username: hello
  password: 123456

可以将参数扩展在address上

# application.yml
dubbo:
 registry:
  address: zookeeper://hello:123456@localhost:2181

分组隔离

通过制定group属性,可以在同一个zookeeper集群内实现微服务地址的逻辑隔离。

dubbo:
  registry:
    address: zookeeper://127.0.0.1:2181
    group: zookeeper-pre

其它配置

dubbo:
  registry:
    address: zookeeper://127.0.0.1:2181
    timeout: 30 * 1000 # 连接超时时间,默认 30s
    session: 60 * 1000 # 会话超时时间,默认 60s

工作原理

zookeeper注册中心实现支持一下高可用能力:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息。
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求。
  • 当回话过期时,能自动恢复注册数据,以及订阅请求。
  • 当设置registry.check=false时,记录失败注册和订阅请求,后台定时重试。

接口级服务发现

  1. 服务提供者启动时,向/dubbo/com.doudou.demo.api.demoservice/providers目录下写入自己的url地址。
  2. 服务消费者启动时,订阅/dubbo/com.doudou.demo.api.demoservice/providers目录下提供的url地址。并向/dubbo/com.doudou.demo.api.demoservice/consumers目录下写入自己的url地址。
  3. 监控中心启动时,订阅/dubbo/com.doudou.demo.api.demoservice目录下的所有提供者和消费者url地址。

可通过registry.group设置zookeeper的根节点,不配置使用默认的/dubbo根节点

应用级服务发现

应用级服务发放以应用名为粒度分发地址列表。服务提供者启动着启动时,向/service/app目录下写入自己的url地址。

应用级的url只包含一些实例级别的参数,如tri://ip:port?region=hangzhou

可通过registry.group设置zookeeper的根节点,默认使用/services根节点。

在应用级服务发现模型中,接口级别的配置信息由服务提供者与服务消费者之间自行同步协商,不再由注册中心服务同步,从而大大减少了注册中心的地址同步压力。

接口应用映射

在应用级服务发现中,zookeeper注册中心还会存储一份额外的元数据,用于解决接口名到应用名之间的映射。存储路径:/dubbo/mapping/service

元数据

如果使用应用级服务发现的集中式元数据模式,默认是点对点模式,可通过dubbo.registry.metadata-type=remote开启。在zookeeper服务/dubbo/metadata目录下会保存每个应用对于机器的元数据信息。

nacos注册中心

基本配置

maven依赖

springboot应用

<dependency>
    <groupid>org.apache.dubbo</groupid>
    <artifactid>dubbo-spring-boot-starter</artifactid>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupid>org.apache.dubbo</groupid>
    <artifactid>dubbo-nacos-spring-boot-starter</artifactid>
    <version>3.3.0</version>
</dependency>

非springboot应用

<dependencies>
    <dependency>
        <groupid>org.apache.dubbo</groupid>
        <artifactid>dubbo</artifactid>
        <version>3.3.0</version>
    </dependency>
    <dependency>
      <groupid>com.alibaba.nacos</groupid>
      <artifactid>nacos-client</artifactid>
      <version>2.1.0</version>
    </dependency>
</dependencies>

nacos版本

dubbo推荐nacos版本nacos兼容范围
3.3.02.3.02.x
3.2.212.1.02.x
3.1.112.0.92.x
3.0.102.0.92.x
2.7.211.x最新版本1.x
2.6.01.x最新版本1.x

配置并启用nacos

# application.yml (spring boot)
dubbo:
 registry:
   address: nacos://localhost:8848

高级配置

认证

# application.yml (spring boot)
dubbo:
 registry:
   address: nacos://localhost:8848?username=nacos&password=nacos

# dubbo.properties
dubbo.registry.address: nacos://nacos:nacos@localhost:8848

自定义命名空间

# application.yml (spring boot)
dubbo:
 registry:
   address: nacos://localhost:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932

# application.yml (spring boot)
dubbo:
 registry:
   address: nacos://localhost:8848
   parameters.namespace: 5cbb70a5-xxx-xxx-xxx-d43479ae0932

自定义分组

# application.yml
dubbo:
 registry:
   address: nacos://localhost:8848
   group: dubbo

如果不配置的话,group 是由 nacos 默认指定。group 和 namespace 在 nacos 中代表不同的隔离层次,通常来说 namespace 用来隔离不同的用户或环境,group 用来对同一环境内的数据做进一步归组。

注册接口级消费者

dubbo 3.0.0 版本以后,增加了是否注册消费者的参数,如果需要将消费者注册到 nacos 注册中心上,需要将参数(register-consumer-url)设置为true,默认是false。

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848?register-consumer-url=true

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848
    parameters.register-consumer-url: true

多注册中心

关联服务与多注册中心

全局默认注册中心

dubbo框架会自动执行以下动作:

  • 对于所有的service服务,向所有全局默认注册中心注册服务地址。
  • 对于所有的reference服务,向所有全局默认注册中心订阅服务地址。
# application.yml (spring boot)
dubbo:
  registries:
    nacospreregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: pre
      group: dubbo_group
    nacostestregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: test1
      group: dubbo_group
@dubboservice
public class demoserviceimpl implements demoservice {}

@dubboservice
public class helloserviceimpl implements helloservice {}

设置全局默认注册中心

dubbo.registry.default用来设置默认注册中心,默认值为true,即被视作全局注册中心。

未指定注册中心的服务自动注册或订阅全局默认注册中心。

# application.yml (spring boot)
dubbo:
  registries:
    nacospreregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: pre
      group: dubbo_group
      default: true # 默认是true
    nacostestregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: test1
      group: dubbo_group
      default: false

显示关联服务于注册中心

以下配置,demoservice只注册到nacospreregistry配置地址,helloservice只注册到nacostestregistry配置地址。

@dubboservice(registry = {"nacospreregistry"})
public class demoserviceimpl implements demoservice {}

@dubboservice(registry = {"nacostestregistry"})
public class helloserviceimpl implements helloservice {}

多注册中心订阅

从单个服务订阅的视角,如果存在多个注册中心订阅的情况,则可以根据注册中心间的地址是否聚合分为两种情况:多注册中心地址不聚合;多注册中心地址聚合。

多注册中心地址不聚合

若注册中心标记为dubbo.registry.default:true,则所有的服务都会某人注册到这些注册中心,消费者也会聚合订阅这些注册中心。

不聚合配置

  1. 取消全局默认标记:确保注册中心未配置dubbo.registry.default:true
  2. 显示指定服务于注册中心的关系: 通过服务级配置隔离注册中心。
# application.yml (spring boot)
dubbo:
  registries:
    nacospreregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: pre
      group: dubbo_group
      default: true # 默认是true
    nacostestregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: test1
      group: dubbo_group
      default: false
@dubboservice(registry = {"nacospreregistry"})
public class demoserviceimpl implements demoservice {}

@dubboservice(registry = {"nacostestregistry"})
public class helloserviceimpl implements helloservice {}

多注册中心地址聚合

通过设置多个注册中心为全局默认,使服务同时注册到多个注册中心,消费者也从所有默认注册中心订阅地址。

服务提供者@dubboservice或服务消费者@dubboreference为指定reigstry配置时,会订阅所有的默认注册中心。

# application.yml (spring boot)
dubbo:
  registries:
    nacospreregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: pre
      group: dubbo_group
      default: true # 默认是true
    nacostestregistry:
      address: nacos://nacos:nacos@127.0.0.1:8848
      parameters.namespace: test1
      group: dubbo_group
      default: true

multicast注册中心

multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。

使用

# 服务提供者与服务消费者
# application.yaml 
dubbo:
  registry:
    address: multicast://224.5.6.7:1234

工作原理

基本流程

  1. 提供方启动时广播自己的地址。
  2. 消费方启动时广播订阅请求。
  3. 提供方接收到订阅请求时,单播自己的地址给订阅者,如果设置了unicast=false,则广播给订阅者。
  4. 消费方收到提供方地址后,连接该地址进行rpc调用。

使用限制

组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段:224.0.0.0 - 239.255.255.255

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com