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

这篇具有很好参考价值的文章主要介绍了Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!,# Dubbo专栏,Dubbo,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

启动结果:

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

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

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

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界面发生变化:

Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!,# Dubbo专栏,Dubbo,Zookeeper,DubboAdmin,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的这个功能的。

Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!,# Dubbo专栏,Dubbo,Zookeeper,DubboAdmin,PrettyZoo,注册中心文章来源地址https://www.toymoban.com/news/detail-751395.html

到了这里,关于Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 作为服务注册中心,Eureka比Zookeeper好在哪里

    RDBMS(Mysql Oracle sqlServer) == 》ACID NoSQL (Redis mongdb) ==》 CAP ACID是什么? A(Atomicity) 原子性 C(Consistence) 一致性 I(Isolation)隔离性 D(Durability)持久性 CAP是什么? C(Consistency)强一致性 A(Availability)可用性 P(Parition tolerance) 分区容错性 CAP的三进二 CA 、AP、CP CAP理论的核心 一个分布式系统

    2024年02月10日
    浏览(36)
  • 手把手带你实现Dubbo集成Nacos作为注册中心(超详细+全代码)

    Nacos简介 什么是Nacos? Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服

    2024年02月09日
    浏览(52)
  • 在项目中同时使用SpringCloud和Dubbo,注册中心选用Eureka?

    在pom.xml文件中添加Dubbo相关依赖:服务提供者和服务消费者都需要 1)配置服务提供者 1、在配置文件中配置Dubbo的相关信息: 2、在服务提供者的启动类上添加@EnableDubbo注解: 3、编写服务提供者的接口和实现类: 添加@Service,指定interfaceClass属性来指定要暴露的接口 2)配置

    2024年01月18日
    浏览(42)
  • Dubbo3.0系列(5)- 新版dubbo-admin安装使用

    在很早之前,dubbo管理控制台是这样子的: 随着dubbo项目的重启,dubbo-admin也进行了重新规划,使用spring boot+ VUE进行了重写,目前最新版本为0.3.0。 GitHub 在上面的GitHub地址下载安装包。 解压,进入apache-dubbo-admin-0.3.0-bin-releaseinconfig目录,编辑application.properties。注释掉zookeepe

    2024年02月07日
    浏览(42)
  • 【使用Zookeeper当作注册中心】自己定制负载均衡常见策略

    大伙肯定知道,在分布式开发中,目前使用较多的注册中心有以下几个: Apache Zookeeper Netflix Eureka Alibaba Nacos 由于 Zookeeper 在面对高频次的服务注册和发现操作可能会一定的性能损耗等原因,搞得现在好多人都不用 Zookeeper 当做注册中心了。但它也提供了强一致性和高可靠性的

    2024年02月12日
    浏览(36)
  • Spring Cloud 使用 k8s 作为注册中心 开发环境 和 生产环境

    因为 k8s 本身就有拥有注册中心,和配置中心的功能。如果还是用 Nacos、Eureka、Consul 之类的注册中心组件,就有点冗余了。当然这些组件还是可以继续用的。 所以,本教程,教授 Spring Cloud 使用 k8s 的注册中心。在开发环境和生产环境 的教程! 下面以一个最简单的 服务消费

    2024年02月15日
    浏览(56)
  • k8s部署kafka,并使用zookeeper做注册中心

    kafka在3.x版本后增加KRaft作为自己的注册中心,可以不依赖外部的zk;这里上一篇已经部署好了zk,kafka依然使用zk作为注册中心。 这里使用kafka是为集成zipkin收发微服务接口链路日志数据,只需要部署1个实列即可够用。 编写脚本yaml vi kafka.yaml 执行部署 kubectl apply -f kafka.yaml 查

    2024年02月07日
    浏览(40)
  • nacos2.1.1版本,作为注册中心,配置中心如何使用,nacos服务端启动,微服务搭建,nacos集群化部署

    关于nacos 相信大多数人一样,在接触微服务的时候知道有Netflix系列和alibaba系列 但是Netflix这一套如今由于部分组件不在开源,又有alibaba这一套的出现,市面上,alibaba系列微服务架构已经是最火热的了,而nacos则是alibaba系列组件充当服务注册发现和配置中心的角色 说白了,就是将每个

    2024年02月03日
    浏览(48)
  • DUBBO注册中心

    providers: 服务提供者目录,记录着服务提供者的ip、端口等信息。 consumers: 服务消费者目录,记录服务消费者的元数据信息,服务提供者并不会用到服务消费者的信息,这里要记录消费者的信息,是给服务治理中心(dubbo-admin)使用的。 routers: 用于消费者路由策略元数据信息。

    2023年04月14日
    浏览(34)
  • zookeeper 查询注册的 dubbo 服务

    1. 连接zookeeper 服务端 使用bin 目录下zk客户端连接服务器, ./zkCli.sh -server  127.0.0.1:2181 2. 查询Dubbo 服务 # 查询所有服务 ls /dubbo   # 查询指定服务调用 ls /dubbo/服务名(接口地址)/consumers   # 查询指定服务调用 ls /dubbo/服务名(接口地址)/providers 3. 返回值实例 返回值查看不是很明显

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包