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

文章目录

一: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-PROVIDERdubbo:application:qos-enable: falseregister-mode: interfaceprotocol:name: dubboport: -1registry:address: zookeeper://127.0.0.1:2181

(二):Consumer

spring:application:name: DUBBO-03-REGISTER-CONSUMERdubbo:application:qos-enable: falseregistry:address: zookeeper://127.0.0.1:2181

3:启动服务结果展示

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

消费者:

@SpringBootTest
public class TestDubbo {@DubboReferenceprivate UserService userService;@Testvoid 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.rhkb.cn/news/206197.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA的天然气工程运维系统

项目编号&#xff1a; S 022 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S022&#xff0c;文末获取源码。} 项目编号&#xff1a;S022&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程…

ESP32-Web-Server编程- 使用SSE 实时更新设备信息

ESP32-Web-Server编程- 使用SSE 实时更新设备信息 概述 如前所述&#xff0c;传统 HTTP 通信协议基于 Request-Apply&#xff08;请求-响应&#xff09;机制&#xff0c;浏览器&#xff08;客户端&#xff09;只能单向地向服务器发起请求&#xff0c;服务器无法主动向浏览器推…

2023亚太杯数学建模A题思路分析 - 采果机器人的图像识别技术

1 赛题 问题A 采果机器人的图像识别技术 中国是世界上最大的苹果生产国&#xff0c;年产量约为3500万吨。与此同时&#xff0c;中国也是世 界上最大的苹果出口国&#xff0c;全球每两个苹果中就有一个&#xff0c;全球超过六分之一的苹果出口 自中国。中国提出了一带一路倡议…

智安网络|发现未知风险,探索渗透测试的奥秘与技巧

在当今信息时代&#xff0c;网络安全已成为组织和个人面临的重大挑战。为了保护网络系统的安全&#xff0c;渗透测试成为一种重要的手段。 一、渗透测试的基本原理 渗透测试是通过模拟黑客攻击的方式&#xff0c;对目标系统进行安全评估。其基本原理是模拟真实攻击者的思维和行…

稳定的音频来了 — 使用人工智能创作音乐(for free)

今天&#xff0c;以稳定扩散&#xff08;Stable Diffusion&#xff09;和StableLM等开源AI工具和模型而闻名的Stability AI公司推出了其首个音乐和声音生成AI产品——StableAudio。音乐产业以其难以打入而闻名。即使您拥有才华和动力&#xff0c;您仍然需要创作和制作音乐所需的…

ESP32单片机案例

工具&#xff1a;VScode PlatformIO IDE 注&#xff1a;B站视频学习笔记。 1、继电器 1&#xff09;硬件电路 2&#xff09;程序 #include <Arduino.h> #define RELAY_PIN 15//初始化定时器 hw_timer_t *timer NULL;void timer_interrupt(){digitalWrite(RELAY_PIN…

C++设计模式——原型 (克隆)模式

一、什么是原型模式 Prototype模式说简单点&#xff0c;就是提供了一个clone, 通过已存在对象进行新对象创建。clone&#xff08;&#xff09;实现和具体的实现语言相关&#xff0c;在C中我们通过拷贝构造函数实现。 那为啥要写clone的接口来实现这个目的呢&#xff1f;直接使…

如何在本地安装部署WinSCP,并实现公网远程本地服务器

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器 文章目录 可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 …

【刷题笔记】分糖果||数组||暴力通过||符合思维方式||多案例分析

分发糖果 文章目录 分发糖果1 题目描述2 题目分析2.1 寻找波峰波谷2.2 从波底往波峰攀爬&#xff01;2.2 计算糖果 3 代码附录1 1 题目描述 https://leetcode.cn/problems/candy/ n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&…

猜-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息&#xff1a; 题目&#xff1a;猜 作者&#xff1a;harry 提示&#xff1a; 解题附件&#xff1a;flag格式key{图中人物名字全拼} 解题思路&#xff1a; 这......头都没有&#xff0c;让我guess&#xff1f;&#xff1f;&#xff1f;详细信息看…

Go 从编译到执行

一、Go运行编译简介 Go语言&#xff08;也称为Golang&#xff09;自从2009年由Google发布以来&#xff0c;已成为现代软件开发中不可或缺的一部分。设计者Rob Pike, Ken Thompson和Robert Griesemer致力于解决多核处理器、网络系统和大型代码库所引发的现实世界编程问题。我们…

小程序禁止二次转发分享私密消息动态消息

第一种用法&#xff1a;私密消息 私密消息&#xff1a;运营人员分享小程序到个人或群之后&#xff0c;该消息只能在被分享者或被分享群内打开&#xff0c;不可以二次转发。 用途&#xff1a;主要用于不希望目标客群外的人员看到的分享信息&#xff0c;比如带有较高金额活动的…

ffmpeg下载与配置环境变量

FFmpeg 是一个强大的多媒体框架&#xff0c;可以让用户处理和操纵音频和视频文件。具有易于使用的界面&#xff0c;用户可以在 Windows、Mac 或 Linux Ubuntu 系统上下载 FFmpeg 并将其提取到文件夹中。然后&#xff0c;该软件可以加入 PATH 环境变量中就可以快捷的使用软件了.…

k8s环境排查nginx转发nacos请求失败问题

一、问题背景 k8s部署两个服务,一个nginx&#xff0c;一个nacos, 服务信息如下(nacos有两个端口): 服务 serviceNameservice类型porttargetPort nodePortnginxmonitor-cp-nginxNodePort808031082nacosmonitor-cp-nacosClusterIP88488848-98489848- ng的default.conf配置文件…

轻型载重汽车转向前桥总成系统毕业设计机械设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;前桥 获取完整说明报告工程源文件 绪论 1.1 轻型载重汽车转向桥的设计意义 汽车是现代交通工具中用得最多&#xff0c;最普遍&#xff0c;也是最方便的交通运输工具。汽车转向系是汽车上的一个重要系统,它是汽车转向运动…

SpringCloudAlibaba之Nacos的持久化和高可用——详细讲解

目录 一、Nacos持久化 1.持久化说明 2.安装mysql数据库5.6.5以上版本(略) 3.修改配置文件 二、nacos高可用 1.集群说明 2.nacos集群架构图 2.集群搭建注意事项 3.集群规划 4.搭建nacos集群 5.安装Nginx 6.配置nginx conf配置文件 7.启动nginx进行测试即可 一、Nacos持久…

【数据中台】开源项目(2)-Davinci可视应用平台

1 平台介绍 Davinci 是一个 DVaaS&#xff08;Data Visualization as a Service&#xff09;平台解决方案&#xff0c;面向业务人员/数据工程师/数据分析师/数据科学家&#xff0c;致力于提供一站式数据可视化解决方案。既可作为公有云/私有云独立部署使用&#xff0c;也可作为…

实现校园网开机自启动部署

❤️博客主页&#xff1a; iknow181&#x1f525;系列专栏&#xff1a; Python、JavaSE、JavaWeb、CCNP&#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 目录 一.准备工作 1、IDE安装 2、安装Selenium 1.介绍 2.下载 3、安装pywifi 1.介绍 2.下载 4、下载浏览器驱…

SpringBoot整合MyBatis

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

知乎禁止转载的回答怎么复制做笔记?

问题 对于“禁止转载”的回答&#xff0c;右键复制是不行的&#xff0c;ctrl-c也不行&#xff0c;粘贴之后都是当前回答的标题。稍微看了代码&#xff0c;应该是对copy事件进行了处理。不过这样真的有用吗&#xff0c;真是防君子不防小人&#xff0c;只是给收集资料增加了许多…