Dubbo中应用级,与接口级配置中心的使用,包括单配置中心与多配置中心

news2024/11/13 14:52:37

接口级或应用级服务发现

Dubbo3 默认采用 “应用级服务发现 + 接口级服务发现” 的双注册模式

可以通过配置 dubbo.registry.register-mode=instance/interface/all 来改变注册行为。

  • instance : 应用级
  • interface : 接口级
  • all :两者都注册(默认模式)

Zookeeper

增加 Maven 依赖

<properties>
    <dubbo.version>3.0.8</dubbo.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!-- This dependency helps to introduce Curator and Zookeeper dependencies that are necessary for Dubbo to work with zookeeper as transitive dependencies  -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

dubbo-dependencies-zookeeper 将自动为应用增加 Zookeeper 相关客户端的依赖,减少用户使用 Zookeeper 成本,如使用中遇到版本兼容问题,用户也可以不使用 dubbo-dependencies-zookeeper,而是自行添加 CuratorZookeeper Client 等依赖。

由于 Dubbo 使用 Curator 作为与 Zookeeper Server 交互的编程客户端,因此,要特别注意 Zookeeper Server Dubbo 版本依赖的兼容性

Zookeeper Server 版本Dubbo 版本Dubbo Zookeeper 依赖包说明
3.4.x 及以下3.0.x 及以上dubbo-dependencies-zookeeper传递依赖 Curator 4.x 、Zookeeper 3.4.x
3.5.x 及以上3.0.x 及以上dubbo-dependencies-zookeeper-curator5传递依赖 Curator 5.x 、Zookeeper 3.7.x
3.4.x 及以上2.7.x 及以下dubbo-dependencies-zookeeper传递依赖 Curator 4.x 、Zookeeper 3.4.x
3.5.x 及以上2.7.x 及以下须自行添加 Curator、Zookeeper 等相关客户端依赖

配置 Zookeeper

yml方式

dubbo
 registry
   address: zookeeper://localhost:2181

properties 文件方式

dubbo.registry.address=zookeeper://localhost:2181 

xml 文件方式

<dubbo:registry address="zookeeper://localhost:2181" /> 

address 是启用 zookeeper 注册中心唯一必须指定的属性,而在生产环境下,address 通常被指定为集群地址,如

address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181

protocol 与 address 分开配置的模式也可以,如

<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />

高级配置

认证与鉴权

如果 Zookeeper 开启认证,Dubbo 支持指定 username、password 的方式传入身份标识。

dubbo
 registry
  address: zookeeper://localhost:2181    
  username: root    
  password: 1234 

也可以直接将参数扩展在 address 上 address=zookeeper://root:1234@localhost:2181

分组隔离

通过指定 group 属性,可以在同一个 Zookeeper 集群内实现微服务地址的逻辑隔离。比如可以在一套集群内隔离出多套开发环境,在地址发现层面实现隔离。

dubbo 
 registry   
  address: zookeeper://localhost:2181
  group: group1

其他扩展配置

配置连接、会话过期时间

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

Zookeeper 注册中心还支持其他一些控制参数,具体可参见Registry 配置项手册

工作原理

Dubbo2 节点结构

img

流程:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址。
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

支持以下功能:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置 <dubbo:registry check=“false” /> 时,记录失败注册和订阅请求,后台定时重试
  • 可通过 <dubbo:registry username=“admin” password=“1234” /> 设置 zookeeper 登录信息
  • 可通过 <dubbo:registry group=“dubbo” /> 设置 zookeeper 的根节点,不配置将使用默认的根节点。
  • 支持 * 号通配符 <dubbo:reference group=“" version="” />,可订阅服务的所有分组和所有版本的提供者

Nacos

Maven依赖

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>3.1.2</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
      <version>2.1.0</version>
    </dependency>
     <!-- Introduce Dubbo Nacos extension, or you can add Nacos dependency directly as shown above-->
     <!--
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>3.1.2</version>
        </dependency>
     -->
</dependencies>

Dubbo 3.0.0 及以上版本需 nacos-client 2.0.0 及以上版本

配置 Nacos

yml方式

dubbo
 registry
   address: nacos://localhost:8848

properties 文件方式

dubbo.registry.address=nacos://localhost:8848

xml 文件方式

<dubbo:registry address="nacos://localhost:2181" /> 

高级配置

认证

dubbo
 registry
   address: nacos://localhost:8848?username=nacos&password=nacos
dubbo.registry.address: nacos://nacos:nacos@localhost:8848

自定义命名空间

dubbo:
 registry:
   address: nacos://localhost:8848
   parameters.namespace: 5cbb70a5-xxx-xxx-xxx-d43479ae0932
   # 或者拼接在address后面
   #address: nacos://localhost:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932

自定义分组

dubbo:
 registry:
   address: nacos://localhost:8848
   group: nacos1

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

注册接口级消费者

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

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

多注册中心

与单注册中心的区别

单注册中心 : dubbo.registriy

多注册中心 :dubbo.registries

关联服务与多注册中心

全局默认注册中心

Dubbo 注册中心和服务是独立配置的,通常开发者不用设置服务和注册中心组件之间的关联关系,Dubbo 框架会将自动执行以下动作:

  • 对于所有的 Service 服务,向所有全局默认注册中心注册服务地址。
  • 对于所有的 Reference 服务,从所有全局默认注册中心订阅服务地址。

设置全局默认注册中心

dubbo
 registries
  beijingRegistry
   address: zookeeper://localhost:2181
   default: true
  shanghaiRegistry
   address: zookeeper://localhost:2182
   default: false

default 用来设置全局默认注册中心,默认值为 true 即被视作全局注册中心。未指定注册中心 id 的服务将自动注册或订阅全局默认注册中心。

显示关联服务与注册中心

通过在 Dubbo 服务定义组件上增加 registry 配置,将服务与注册中心关联起来。

@DubboServiceregistry = {"beijingRegistry"}
public class DemoServiceImpl implements DemoService {}

@DubboServiceregistry = {"shanghaiRegistry"}
public class HelloServiceImpl implements HelloService {}

增加以上配置后,DemoService 将只注册到 beijingRegistry,而 HelloService 将注册到 shanghaiRegistry

多注册中心订阅

服务订阅由于涉及到地址聚合和路由选址,因此逻辑会更加复杂一些。从单个服务订阅的视角,如果存在多注册中心订阅的情况,则可以根据注册中心间的地址是否聚合分为两种场景。

多注册中心地址不聚合

<dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" /> 
<dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" /> 
dubbo.registries.beijing.address=zookeeper://192.168.179.82:2181
dubbo.registries.shanghai.address=nacos://192.168.179.82:8848

如以上所示独立配置的注册中心组件,地址列表在消费端默认是完全隔离的,负载均衡选址要经过两步:

  1. 注册中心集群间选址,选定一个集群
  2. 注册中心集群内选址,在集群内进行地址筛选

img

下面我们着重分析下如何控制 注册中心集群间选址,可选的策略有如下几种 随机 每次请求都随机的分配到一个注册中心集群

随机的过程中会有可用性检查,即每个集群要确保至少有一个地址可用才有可能被选到。

preferred 优先

<dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" preferred="true"/> 
<dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" /> 
dubbo.registries.beijing.preferred=true

如果有注册中心集群配置了 preferred=“true”,则所有流量都会被路由到这个集群。

weighted

<dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" weight="100"/> 
<dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" weight="10" /> 
dubbo.registries.beijing.weight=100

基于权重的随机负载均衡,以上集群间会有大概 10:1 的流量分布。

同 zone 优先

<dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" zone="hangzhou" />
<dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" zone="qingdao" />
RpcContext.getContext().setAttachment("registry_zone", "qingdao"); 

根据 Invocation 中带的流量参数或者在当前节点通过 context 上下文设置的参数,流量会被精确的引导到对应的集群。

2.2 多注册中心地址聚合

<dubbo:registry address="multiple://127.0.0.1:2181?**separator**=;&**reference-registry**=zookeeper://address11?backup=address12,address13;zookeeper://address21?backup=address22,address23" />

这里增加了一个特殊的 multiple 协议开头的注册中心,其中:

  • multiple://127.0.0.1:2181 并没有什么具体含义,只是一个特定格式的占位符,地址可以随意指定
  • reference-registry 指定了要聚合的注册中心集群的列表,示例中有两个集群,分别是 zookeeper://address11?backup=address12,address13zookeeper://address21?backup=address22,address23,其中还特别指定了集群分隔符 separator=";"

如下图所示,不同注册中心集群的地址会被聚合到一个地址池后在消费端做负载均衡或路由选址。

img

在 3.1.0 版本及之后,还支持每个注册中心集群上设置特定的 attachments 属性,以实现对该注册中心集群下的地址做特定标记,后续配合 Router 组件扩展如 TagRouter 等就可以实现跨机房间的流量治理能力。

<dubbo:registry address=“multiple://127.0.0.1:2181?separator=;&reference-registry=zookeeper://address11?attachments=zone=hangzhou,tag=middleware;zookeeper://address21” />

增加 attachments=zone=hangzhou,tag=middleware 后,所有来自该注册中心的 URL 地址将自动携带 zone 和 tag 两个标识,方便消费端更灵活的做流量治理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文详解jvm之-Xms -Xmx -Xmn -Xss -XX:PermSize -XX:MaxPermSize等参数的设置和优化以及如何选择垃圾回收器

文章目录1. 文章引言2. 常见配置汇总2.1 Xmn Xms Xmx Xss的区别2.2 其他常见配置2.3 典型设置举例3. 回收器选择3.1 吞吐量优先的并行收集器3.2 响应时间优先的并发收集器3.3 辅助信息4. 参考文档1. 文章引言 我们经常在tomcat的catalina.bat或者catalina.sh中配置如下参数&am…

亚马逊、速卖通、temu、Cdiscount通过自养号给自己店铺测评补单需要哪些技巧?

亚马逊卖家通过测评平台&#xff0c;获取亚马逊买家的真实服务点评&#xff0c;即亚马逊测评。它既可以让买家更加快速、有效地了解产品&#xff0c;也可以让卖家有机会通过买家的评论去优化产品&#xff0c;以获得更多买家的喜爱。因此&#xff0c;亚马逊测评之于卖家&#xf…

Linux下内存buff/cache占用过多问题解决

在Linux下经常会遇到buff/cache内存占用过多问题&#xff0c; 尤其是使用云主机的时候最严重&#xff0c;由于很多是虚拟内存&#xff0c;因此如果buff/cache占用过大的&#xff0c; free空闲内存就很少&#xff0c;影响使用&#xff1b; 通常内存关系是&#xff1a; 普通机器…

Python 获得摄像头捕捉的图像

Python 获得摄像头捕捉的图像 很多时候&#xff0c;我们都需要通过摄像头捕获图像&#xff0c;以便进行处理&#xff0c;在这里分享的是通过OPEN CV这个库来实现。 OPEN CV的安装和使用 安装很简单&#xff0c;相关文章也很多&#xff0c;注意一点&#xff0c;不要安装最新版…

【Android视频号信息获取①】

*在2019年深圳上班的时候 那时候还是个Java 码农 接触了一下 Xposed.时隔多年 忘记差不多了 用frida先来练练手 新公司又让我研究微信视频号获取个人的视频主页标题列表 * 确定微信版本 不同版本微信hook点不一样。 预想实现方式 用Xposed去请求注册一个中转服务 然后脚本请…

Java——编辑距离

题目链接 leetcode在线oj题——编辑距离 题目描述 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 题目示例 输入&#xff1a;word…

搭建DJI 无人机Onboard SDK ROS开发环境及测试

搭建DJI 无人机Onboard SDK ROS开发环境及测试功能包简介开发环境搭建测试功能包连接设备启动SDK功能包简介 ROS功能包名称&#xff1a;dji_sdk 功能包功能&#xff1a;用于DJI 板载SDK的ROS版本 OSDK 是一个用于开发无人机应用程序的开发工具包&#xff0c;基于OSDK 开发的…

CUDA线程层次一文搞懂|参加CUDA线上训练营

设备术语 Host&#xff1a;CPU 和 内存 (host memory)Device&#xff1a;GPU 和显存 (device memory) CUDA 线程层次 CUDA 线程层次分为&#xff1a; Thread 所有线程执行相同的核函数并行执行 Thread Block 执行在一个 Streaming Multiprocessor &#xff08;SM&#xff09…

Python快速上手系列--异常处理--详解篇

本章所说的就是我们经常遇到的一个问题&#xff0c;报错、异常。我们应该如何处理&#xff0c;让它不影响后面的程序运行。异常首先我们看看一个简单的示例。print(2/0)其结果可想而知&#xff0c;当然是报错了&#xff01;程序被终止了&#xff01;这里会提示用户&#xff0c;…

索引-性能分析-慢查询日志

索引语法 1、创建索引时候 [UNIQUE | FULLTEXT] 关键字是可选的&#xff1b; 1&#xff09;加上 UNIUQE 就是创建唯一索引&#xff08;唯一索引&#xff0c;说明改字段不能出现重复数据&#xff09;&#xff1b; 2&#xff09;加上FULLTEXT 创建的是一个全文索引&#xff1b;…

Webpack5 环境下 Openlayers 标注(Icon) require 引入图片问题

Webpack5 环境下 Openlayers 标注&#xff08;Icon&#xff09; require 引入图片问题环境版本Openlayers 使用 require 问题Webpack5 正确配置构建新环境的时候&#xff0c;偶然发现 Openlayers 使用 require 的方式加载图片&#xff08;Icon&#xff09;报错&#xff0c;开始…

电子技术——DC偏移

电子技术——DC偏移 因为差分放大器是直接耦合的并且对于DC有着有限的增益&#xff0c;因此本节我们讨论差分放大器在DC相关方面的问题。 MOS差分放大器的输入偏移电压 考虑下面的电路&#xff0c;我们将MOS差分放大器的输入端都置地&#xff1a; 此时假如电路完全对称&#…

IP地址:揭晓安欣警官自证清白的黑科技

《狂飙》这部电视剧&#xff0c;此从播出以来可谓是火爆了&#xff0c;想必大家都是看过的。剧中&#xff0c;主人公“安欣”是一名警察。一直在与犯罪分子做斗争。 莽村的李顺案中&#xff0c;有匿名者这个案件在网上发帖恶意造谣&#xff0c;说安欣是黑恶势力的保护伞&#…

将视频作为桌面动态壁纸,只需要两步,让你保存的视频在桌面动起来,动态壁纸工具,视频动态壁纸,小风车,桌面美化工具

这款软件可以让你宝贵的视频资源变成动态壁纸显示在你的电脑上&#xff0c;体积小巧&#xff0c;不需要安装&#xff0c;即点即用。 一、软件简介 这是一款可以将视频文件作为动态壁纸展示在电脑桌面的软件&#xff0c;它体积小巧&#xff0c;占用资源也不多&#xff0c;相比…

SpringMVC基础入门(一)之理论基础概念

文章目录SpringMVC1.概念2.常用注解请求与响应1.请求参数2.JSON传输3.常用注解响应1.响应页面2.响应JSON数据Rest风格1.介绍2.常用注解SpringMVC 1.概念 &#xff08;1&#xff09;定义 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。 &#xff08;2&#xff09;为什…

test2

物理层故障分析 一、传输介质故障 a.主要用途简述 传输介质主要分为 导向传输介质和非导向传输介质。前者包括双绞线&#xff08;两根铜线并排绞合&#xff0c;距离过远会失真&#xff09;、同轴电缆&#xff08;铜质芯线屏蔽层&#xff0c;抗干扰性强&#xff0c;传输距离更…

VScode查看python f.write()的文件乱码

VScode查看python f.write()的文件乱码 在使用 VScode 编写 python 代码&#xff0c; print&#xff08;&#xff09;&#xff0c;汉字正常显示&#xff0c; 使用 with open&#xff08;&#xff09;as f&#xff1a; f.write&#xff08;&#xff09;文件后&#xff0c; 在 …

【Java】HashMap原理

哈希表&#xff08;Hash table&#xff09; 也叫散列表&#xff0c;是根据键&#xff08;Key&#xff09;而直接访问在内存存储位置的数据结构。也就是说&#xff0c;它通过计算一个关于键值的函数&#xff0c;将所需查询的数据映射到表中一个位置来访问记录&#xff0c;这加快…

nvm安装后出现‘node‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

出现这个问题多半是path地址不对。 打开系统环境变量。看看path里面有没有&#xff1f;没有的话&#xff0c;加上就行&#xff01; 我的报错原因就是因为path里没有自动加上nvm的相关路径。 注意项&#xff1a; 1&#xff0c;在安装nvm之前&#xff0c;提前要把本机以前安装…

剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)

剑指 Offer 32 - II. 从上到下打印二叉树 II&#xff08;java解题&#xff09;1. 题目2. 解题思路3. 数据类型功能函数总结4. java代码5. 踩坑记录1. 题目 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。 例如: 给定二叉…