Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!

news2024/9/22 19:35:30

文章目录

一:Dubbo注册中心的基本使用

二:Zookeeper注册中心的使用

1:依赖引入

2:实际开发

三:Zookeeper作为注册中心的使用展示

1:启动注册Zookeeper服务

2:引入注册中心

(一):Provider

(二):Consumer

3:启动服务结果展示

4:监控服务的两种手段


一:Dubbo注册中心的基本使用

        我们使用的和分析讲解的Dubbo版本是Dubbo3,作为Dubbo来讲Dubbo支持的注册中心有很多Zookeeper、Nacos、Consule等等。这是三种比较常见的注册中心当然我指的是在Dubbo当中,另外不太常见的还有Etced这样的注册中心。我们在进行Dubbo注册中心讲解的时候,会把这个三个着重挑选出来作为重点讲解对象,这个原因是非常简单的。

        首先我们在前面的Rpc专栏的时候,Zookeeper我们已经分析过了,而另外的Nacos在微服务当中有着举足轻重的地位!他也是阿里的DNS这种解决方案当中N的这个元素,他在阿里的体系技术中有着很高的作用。对于Consul来讲,在云原生环境下这个Consul是非常适用于云原生环境的技术栈,所以适应新的潮流我们不得不对Consul进行分析和讲解。Etced相对来讲使用要少一点,我们暂时不对他进行相应的讲解。

二:Zookeeper注册中心的使用

        应用Zookeeper作为注册中心,首先我们要对引入对应的依赖。这个依赖实际上包含的是两个部分的内容。第一个依赖是Zookeeper的Java客户端,客户端是Java应用与Zookeeper进行通信交互的基础,我们当前使用的是3.8.1这个版本,第二个依赖是对Zookeeper的Java客户端的高级封装curator,在这里我们选择的是curator5这个版本。实际上作为Zookeeper客户端和curator版本的使用,Dubbo已经在他的官网上给我们罗列出来了:

Zookeeper Server版本Dubbo版本Dubbo Zookeeper依赖包说明
3.4.x及以下3.0.x及以上dubbo-dependencies-zookeeper传递依赖Curator4.x、Zookeeper 3.4.x
3.5.x及以上3.0.x及以上dubbo-dependencies-zookeeper-curator5传递依赖Curator5.x、Zookeeper 3.7.x
3.4.x及以上2.7.x及以下dubbo-dependencies-zookeeper传递依赖Curator4.x、Zookeeper 3.4.x
3.5.x及以上2.7.x及以下需要手动添加Curator、Zookeeper等相关客户端依赖

        这里边涉及到的版本有Dubbo的版本和Zookeeper的版本和他们对应的依赖包的说明,当前咱们的Dubbo选择的是3.2.0且Zookeeper的版本选择是的3.6这个版本,按照这个关系我们应该从第二行的表格中的设置方式去挑选。 所以应该选择dubbo-dependencies-zookeeper-curator5这个依赖包。

1:依赖引入

        基于上边的依赖关系,我们挑选如下的版本来设置我们的Zookeeper客户端版本。

  <dependency>
    <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
    <version>${dubbo.version}</version>
    <type>pom</type>
    <exclusions>
      <exclusion>
        <artifactId>zookeeper</artifactId>
        <groupId>org.apache.zookeeper</groupId>
      </exclusion>
    </exclusions>
  </dependency>

  <dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.8.1</version>
  </dependency>

2:实际开发

        接下来我们就需要进行相应的开发了。接下来的开发反而比较简单了,首先我们的依赖已经引入进来了。我们只需要在provider和consumer当中进行一个配置即可,其中一个非常指的注意的是,不论我们选择使用什么注册中心或者Zookeeper或者Nacos也好,只要在Dubbo的体系下使用注册中心,那么这个配置必须在我们的Provider和Consumer下面都进行注册!

        如果我们还引入了DubboAdmin的话,我们也得在DubboAdmin当中对注册中心进行相应的配置。并且呢Provider对注册中心的配置和Consumer对注册中心的配置以及DubboAdmin对注册中心的配置要保持一致!所以,我们的配置流程就是在Consumer和Provider的配置文件中去配置一个dubbo.registry.address即可:

dubbo:
    registry:
        address:zookeeper://127.0.0.1:2181

        注册中心的地址里面如果我们选择的是Zookeeper作为注册中心,那么需要使用Zookeeper协议。Zookeeper://这样就代表了Zookeeper的协议,如果后续我们选择Nacos的话,只需要使用:

dubbo:
    registry:
        address:nacos://127.0.0.1:2181

        值得注意的是,协议后边的ip地址就是我们的注册中心服务对应的主机ip地址。我们当前是本地安装那么就是127.0.0.1。当前的端口是注册中心的监听端口,Zookeeper的默认端口是2181,Nacos的默认端口是8848,Consul的默认端口是8500 ,通过这样的一种方式,我们就在我们的整个服务中引入了Zookeeper作为我们的注册中心了。

三:Zookeeper作为注册中心的使用展示

1:启动注册Zookeeper服务

启动命令:bin/zkServer.cmd

启动结果:

使用我们的PrettyZoo可视化工具可以看到Zookeeper的服务内容。 当前我们可以清楚的看到在我们的根节点下只有我们一个zookeeper的节点,这是非常正常和干净的。接下来我们启动我们的服务来进行测试。

             

2:引入注册中心

(一):Provider

spring:
  application:
    name: DUBBO-02-REGISTER-PROVIDER

dubbo:
  application:
    qos-enable: false
    register-mode: interface
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://127.0.0.1:2181

(二):Consumer

spring:
  application:
    name: DUBBO-03-REGISTER-CONSUMER

dubbo:
  application:
    qos-enable: false
  registry:
    address: zookeeper://127.0.0.1:2181

3:启动服务结果展示

        首先我们直接启动提供者,然后在启动我们的消费者。

消费者:

@SpringBootTest
public class TestDubbo {
    @DubboReference
    private UserService userService;

    @Test
    void test1() throws IOException {
        String xiaohei = userService.login("xiaohei", "11111");
        System.out.println("xiaohei = " + xiaohei);
        System.in.read();
    }
}

        启动之后,服务向我们的注册中心发起注册,PrettyZoo界面发生变化:

        消费者是基于测试启动的一个服务,然后UserService代理对象已经基于DubboReference注解注入了进来,我们加入一个阻塞方便查看结果,首先是我们的消费端的结果展示:

2023-11-23 22:51:04.008  INFO 4272 --- [           main] o.a.d.r.c.m.MigrationRuleHandler         :  [DUBBO] Succeed Migrated to APPLICATION_FIRST mode. Service Name: com.suns.service.UserService, dubbo version: 3.2.0, current host: 192.168.8.1
2023-11-23 22:51:04.008  INFO 4272 --- [           main] org.apache.dubbo.config.ReferenceConfig  :  [DUBBO] Referred dubbo service: [com.suns.service.UserService]. it's not GenericService reference, dubbo version: 3.2.0, current host: 192.168.8.1
2023-11-23 22:51:04.011  INFO 4272 --- [Report-thread-1] o.a.d.m.s.z.ZookeeperMetadataReport      :  [DUBBO] store consumer metadata. Identifier : org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@440c2c9d; definition: org.apache.dubbo.common.url.component.URLParam$URLParamMap@58ea4a38, dubbo version: 3.2.0, current host: 192.168.8.1
xiaohei = this is login

        提供者基于SpringBoot入口类进行服务启动,服务启动完毕之后等待消费者的调用,接下来是我们消费者的调用结果:

2023-11-23 22:48:38.704  INFO 612 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener :  [Dubbo] Current Spring Boot Application is await...
2023-11-23 22:51:03.960  INFO 612 --- [erverWorker-3-1] o.a.d.r.t.netty4.NettyServerHandler      :  [DUBBO] The connection of /192.168.8.1:55886 -> /192.168.8.1:20880 is established., dubbo version: 3.2.0, current host: 192.168.8.1
2023-11-23 22:51:04.123  INFO 612 --- [erverWorker-3-1] o.a.dubbo.rpc.protocol.dubbo.DubboCodec  :  [DUBBO] Because thread pool isolation is enabled on the dubbo protocol, the body can only be decoded on the io thread, and the parameter[decode.in.io.thread] will be ignored, dubbo version: 3.2.0, current host: 192.168.8.1
UserServiceImpl.login name is xiaohei password is 11111

        从结果上来看,我们从消费端出入的参数在服务提供端控制台正确的被打印了出来,说明我们的消费者和提供者之间的Rpc调用成功进行,也证明了基于此次Zookeeper作为我们的注册中心完成消费者和提供者之间的通信是成功的!

4:监控服务的两种手段

        当然我们刚才监控注册中心的方式是基于PrettyZoo的形式来检测我们的注册中心,那么还有没有其他的方式来监控我们的注册中心中的内容呢?当时是有的,这个手段就是基于DubboAdmin当我们启动完毕DubboAdmin之后,可能会遇到这样的一个问题导致启动失败。这个异常就是端口地址绑定失败,这个是因为我们的DubboAdmin启动的时候会模拟一个Dubbo服务出来往我们的注册中心发起注册,现在报错是因为我们的我们刚才启动的提供者的服务已经把我们的本地20880端口给占用了,这个时候DubboAdmin在基于这个端口启动就启动不起来了,我们需要先启动我们的DubboAdmin,然后在启动我们的Provider和Consumer即可,因为按照道理来讲也应该先启动我们的监控平台,在启动我们的Dubbo服务。

        浏览器中输入Localhost:9000就可以查看我们的DubboAdmin监控平台。上来之后,我们可发发现DubboAdmin中只有我们的MockService。这个时候重新启动我们的提供者和消费者即可。这个时候,我们可以在DubboAdmin中看到我们的Dubbo服务了。

        这件事情告诉我们如何监控我们的服务,第一种方式就是基于我们的注册中心,如果是Zookeeper作为注册中心的话,我们可以使用PrettyZoo作为可视化工具进行检测即可。第二种方式就是使用DubboAdmin也可以完成对Dubbo服务的监控!

        后续,我们强烈建议使用DubboAdmin来监控我们的服务,首先就是DubboAdmin不仅仅可以可以监测到具体的服务,另外还可以对服务进行测试、服务的统计等等功能。所以后续我们的Pretty可以少用,尽量多用我们的DubboAdmin。

        为什么我们切换启动顺序之后,后续的Provider的端口就不再是20880了呢?当前我们的提供者基于Dubbo协议,他的端口号我们设置的是-1,这个负一的特点就是如果服务启动的时候如果默认端口号20880被占用的话,就会在原有的基础上进行+1,这样我们的DubboAdmin中的MockService和提供者服务就都能正常启动了。值得注意的是DubboAdmin启动的时候,是没有端口号+1的这个功能的。

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

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

相关文章

react中的state

没想到hooks中也有state这一说法 看下面的两个案例 1、无state变化不会执行父子函数 2、有state更改执行父子函数

winlogbeat采集windows日志

下载链接 https://www.elastic.co/cn/downloads/past-releases/winlogbeat-7-16-2 配置文件 # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch:# Array of hosts to connect to.hosts: ["192.168.227.160:9200&…

『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程

『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程 1 Postman工具简介2 Postman安装3 Postman界面说明4 一个简单请求4.1 请求示例4.2 请求过程 5 Postman其他操作5.1 import5.2 History5.3 Environment5.4 Global5.5 其他变…

HBuilderX前端软件社区+Thinkphp后端源码

HBuilderX前端软件社区thinkphp后端源码&#xff0c;搭建好后台在前端找到 util 这个文件把两个js文件上面的填上自己的域名&#xff0c;登录HBuilderX账号没有账号就注册账号然后上传文件即可。打包选择发行 可以打包app或h5等等 后端设置运行目录为public(重要)&#xff0c;…

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

1、环境需求 本帖针对的是Linux环境&#xff0c;Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。 1.JDK&#xff08;或JRE&#xff09;及Java环境变量配置&#xff0c;我用的是JDK1.8.0_144。 2.Jenkins 持续集成和持续交付项目。 3.现有项目及gitla…

【Web】NewStarCTF Week1 个人复现

目录 ①泄露的秘密 ②Begin of Upload ③Begin of HTTP ④ErrorFlask ⑤Begin of PHP ⑥R!C!E! ⑦EasyLogin ①泄露的秘密 盲猜/robots.txt,访问得到flag前半部分 第二个没试出来&#xff0c;老老实实拿dirsearch扫吧 访问/www.zip 下载附件&#xff0c;拿到第二部分…

QtCreator9.02不支持JDK11解决

最终效果 使用Android Studio 下载Android SDK Platform 31与Sources for Android 31 下载Android SDK Build Tools 31.0.0 下载NDK 25.1 ,23.1 ,21.3 重要: 下载Android SDK Command-Line Tools ,选择10.0或者9.0其中一个版本 其它版本不支持JDK11 ,本例选择10.0 下载CMak…

<JavaEE> 什么是线程(Thread)?进程和线程有什么区别?

目录 一、线程&#xff08;Thread&#xff09;的概念 二、线程存在的意义 2.1 并发编程 2.2 比进程更“轻量” 三、使用线程时应该注意 四、进程和线程的区别 五、Java中的线程和操作系统中的线程是不同的概念 六、多线程编程 一、线程&#xff08;Thread&#xff09;的…

力扣283:移动零(JAVA)

题目描述: 意思是将所有0移到最后的同时其余非0元素位置仍然不变 如 1 2 0 5 2 0 经过移动零后变为 1 2 5 2 0 0 思路:使用双指针的思路来写 fast:从左往右遍历数组 slow:非零元素最后的一个位置 将数组分为3个区间 [0,slow]为处理好的非0数据,slow永远指向最后一个非0数据 [s…

案例014:Java+SSM+uniapp+mysql基于微信小程序的健身管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Web服务器(go net/http) 处理Get、Post请求

大家好 我是寸铁&#x1f44a; 总结了一篇Go Web服务器(go net/http) 处理Get、Post请求的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 go http请求如何编写简单的函数去拿到前端的请求(Get和Post) 服务器(后端)接收到请求后&#xff0c;又是怎么处理请求&#xff0c…

Ubuntu安装CUDA驱动

Ubuntu安装CUDA驱动 前言官网安装确认安装版本安装CUDA Toolkit 前言 CUDA驱动一般指CUDA Toolkit&#xff0c;可通过Nvidia官网下载安装。本文介绍安装方法。 官网 CUDA Toolkit 最新版&#xff1a;CUDA Toolkit Downloads | NVIDIA Developer CUDA Toolkit 最新版文档&…

致远M3 反序列化RCE漏洞复现(XVE-2023-24878)

0x01 产品简介 M3移动办公是致远互联打造的一站式智能工作平台&#xff0c;提供全方位的企业移动业务管理&#xff0c;致力于构建以人为中心的智能化移动应用场景&#xff0c;促进人员工作积极性和创造力&#xff0c;提升企业效率和效能&#xff0c;是为企业量身定制的移动智慧…

Python----类对象和实例对象

目录 一.类和类的实例 二.类属性和实例属性 三.私有属性和公有属性 四.静态方法和类方法 五.__init__方法&#xff0c;__new__方法和__del__方法&#xff1a; 六.私有方法和公有方法 七.方法的重载 八.方法的继承 九.方法的重写 十.对象的特殊方法 十一.对象的引用&a…

selenium下拉框的操作这样做,阿里p10都直呼牛逼

下拉框处理 web页面上经常会有下拉框&#xff0c;对下拉框的处理比较简单&#xff0c;一般分为两种情况&#xff1a; 一、下拉框通过元素定位识别 driver.find_element(By.XPATH,//option[value"peach"]).click() 二、创建一个select的对象&#xff0c;然后通过相…

C/C++小写字母的判断 2022年3月电子学会中小学生软件编程(C/C++)等级考试一级真题答案解析

目录 C/C小写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C小写字母的判断 2022年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符&#xff0c;判断是否是英文小…

2023亚太杯数学建模C题思路分析 - 我国新能源电动汽车的发展趋势

1 赛题 问题C 我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源( 非常规汽车燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;将先进技术进行汽车动力控制和驱动相结 合的汽车。新能源汽车主要包括四种类型&#x…

面试:RabbitMQ相关问题

文章目录 简单介绍RabbitMQRabbitMQ架构什么是 RabbitMQ&#xff1f;有什么显著的特点&#xff1f;RabbitMQ 有那些基本概念&#xff1f;RabbitMQ routing 路由模式消息怎么路由&#xff1f;RabbitMQ publish/subscribe 发布订阅(共享资源)能够在地理上分开的不同数据中心使用 …

用于计算机屏幕安全摄像头系统:Screen Anytime Crack

Screen Anytime 是一款软件&#xff0c;旨在自动将整个用户会话或 PC/服务器/VM/Kiosk 的 /RDP/Citrix/RemoteApp 会话的屏幕活动记录到视频日志文件中&#xff0c;以用于记录、审核和监控目的。通过重播其高度压缩的视频&#xff0c;您可以轻松回顾单台计算机或一组服务器/PC …

/etc/sudoers visudo

允许不输入密码 %wheel ALL(ALL) NOPASSWD: ALL %sudo ALL(ALL) NOPASSWD: ALL %wheel ALL(ALL:ALL) NOPASSWD: ALL %sudo ALL(ALL:ALL) NOPASSWD: ALLFedora39 对比 Ubuntu22.04.3 的 /etc/sudoers ## Next comes the main part: which users can run what software on ## …