Dubbo+Zookeeper使用_dubbo zookeeper配置

这篇具有很好参考价值的文章主要介绍了Dubbo+Zookeeper使用_dubbo zookeeper配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

}

@Override
public User getUser(Integer id) {
    User user = new User(30, "张三", "12456");
    return user;
}

}


#### (3)配置


使用Dubbo前,需先导入依赖,我这里直接在父模块中添加,如下:



<?xml version="1.0" encoding="UTF-8"?>


4.0.0

<groupId>com.hzy</groupId>
<artifactId>user-provider</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.1.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <java.version>8</java.version>
    <spring-boot.version>2.2.1.RELEASE</spring-boot.version>
    <dubbo.version>2.7.5</dubbo.version>
    <curator.version>2.12.0</curator.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
    <!--MVC框架-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--dubbo-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>${dubbo.version}</version>
    </dependency>

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

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${curator.version}</version>
    </dependency>
</dependencies>

设置各个服务的配置,两方面,一方面是zookeeper,一方面是dubbo的,如下:


(OrderService)



server:
port: 8081
spring:
application:
name: dubbo-consumer
dubbo:
registry:
address: zookeeper://localhost:2181 # 连接到注册中心
protocol:
name: dubbo # 指定的协议
port: 28081 # 指定的端口
scan:
basePackages: com.hzy.controller # 接口列表和接口中的方法列表


(UserService)



server:
port: 8082
spring:
application:
name: dubbo-provider
dubbo:
registry:
address: zookeeper://localhost:2181 # 连接到注册中心
protocol:
name: dubbo # 指定的协议
port: 28082 # 指定的端口
scan:
basePackages: com.hzy.controller # 接口列表和接口中的方法列表


#### (4)启动


**依次** 启动用户服务、订单服务,没有报错说明项目注册到zookeeper没有问题;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


打开zookeeper客户端,输入 `ls /`可查看到dubbo项,再输入`ls /dubbo`,可查看到注册的服务;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


#### (5)使用


使用Dubbo非常简单,只需如下操作:


* 第一步:修改提供者Service注解,改为Dubbo依赖提供的;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


* 第二步:将提供者的UserService接口复制一份到消费者这边来,**注意结构要平行相同**;
* 


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


* 第三步:在消费者Controller层注入(引用)UserService接口;
* 第四步:直接调用UserService中的接口;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


#### (6)测试


重启两个服务(注意先启动提供者),使用fastRequest测试;


(获取用户名)


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


(获取用户信息)


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


可以看到两个接口都可以正常返回,说明zookeeper+dubbo的结合已完成;


### Dubbo特性


以下介绍Dubbo中的一些特性,更多特性用法可在[官网]( )中查看;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


#### (1)启动检查


上面一直提到,需要先启动提供者,再启动消费者,这是因为消费者服务依赖于提供者,在启动时Dubbo会进行检查,发现提供者找不到会报错,程序启动失败。


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


可在消费者这边添加如下配置,取消启动检查



取消消费者检查

dubbo:
consumer:
check: false


再次启动就没有问题了


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


#### (2)地址缓存


地址缓存是指,消费者与提供者联系建立起来了,服务消费者会把提供者的接口地址缓存一份,此时注册中心宕机,该请求仍可以正常访问;


发送请求,没得问题;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


关闭注册中心zookeeper;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


两个服务一直在打印未知错误;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


此时,访问刚刚的那个请求,仍然可以成功;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


换个重启服务后没发过的请求,也可以访问;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


#### (3)对象传输


使用Dubbo可以传输自定义对象,但需要注意对象需要实现序列号接口,不然会报错;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


根据经验,凡是涉及到传输对象,都需要实现序列化接口,并且最好添加全参构造、无参构造,因为有些工具,底层可能是通过对象的全参构造来帮助我们实例化对象的。


#### (4)连接超时


Dubbo默认设置的连接超时是1秒,即当消费者发送的请求,1秒未得到返回即为超时,这个超时是可以设置的。


在提供者这边方法内设置2秒睡眠;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


消费者发送请求,返回超时错误;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


连接超时可以在消费者、提供者设置,并且可以在接口、方法上设置,**优先级是消费者大于提供者,方法大于接口**,如下我在消费者(@Reference)、提供者(@Service)双方设置超时时长;


(消费者,设置1500ms)


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


(提供者,设置3000ms)


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


(重启服务,发送请求,依旧报错,说明提供者设置的超时没有起作用,超时是以消费者的1500ms为准)


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


(互调设置,消费者设置3000ms,提供者1500ms,重启服务可以正常访问)


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


#### (5)重试次数


重试次数,在之前连接超时错误的信息,可以看到一个“Tried 3 times”,表示尝试了3次,默认重试2次;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


同样,这个也可以在消费者、提供者双方设置


(提供者)



// 设置重试10次
@Service(timeout = 3000, retries = 10)


(消费者)



// 设置重试5次
@Reference(timeout = 1500, retries = 5)
private UserService userService;


同样,优先级是消费者大于提供者;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


##### 注意


需要注意哦,不是所有操作都可以设置重试次数的,应该需要考虑当前请求所对应的操作是否为幂等性操作,即执行一次或多次结果都相同,不然会造成数据混乱。以数据库的增删改查操作为例:


* 增:每增加一条数据,数据库表都是变化的,所以为非幂等性;
* 删:与增同理,是非幂等性;
* 改:视情况而定,看SQL语句是怎么写的,如果是"number + 1"这样的,是非幂等性;如果是“set name = #{name} where id = #{id}”这样的,就是幂等性的;
* 查:多次查询(没有其他操作参与)数据库表都是一样的,所以是幂等性操作;


#### (6)多版本


多版本是指,如果存在多个提供者、消费者时,可以指定版本信息,让提供者指服务指定的消费者,消费者指消费指定的服务者;


(消费者,不指定版本信息)



@Reference(timeout = 3000, retries = 5)
private UserService userService;


(提供者,指定版本信息“V1.0”)



@Service(timeout = 3000, retries = 10, version = “V1.0”)


请求失败,提示没有可用的提供者;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


修改消费者版本号为“V1.0”;



@Reference(timeout = 3000, retries = 5,version = “V1.0”)


请求访问成功;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


使用Dubbo的这种特性,可以实现灰度发布,即版本更新不是一下全部更新,而是在系统中设置多个版本,如新版本的接口设置10个,旧版本的接口设置5个,实现“缓更新,慢发布”,减少系统出现异常的风险,比如一些金融、支付类的软件。


#### (7)负载均衡


可使用“loadbalance”属性设置接口的负载均衡策略,支持以下四种策略:


* RandomLoadBalance:加权随机,默认算法,默认权重相同;
* RoundRobinLoadBalance:加权轮询,默认权重相同;
* LeastActiveLoadBalance:最少活跃优先+加权随机,能者多劳;
* ConsistentHashLoadBalance:一致性Hash,确定入参,确定提供者,适用于有状态的请求;


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


注意使用并不是直接new它们类,而是进入到它们对应的类里面,查看它们的这行代码中写的名称


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


将该名称作为负载均衡属性的值



@Reference(loadbalance = “random”)
private UserService userService;


在代码中打印一行标识,开启两个服务,发送十几条请求,可以看到两边服务均有访问,数量不等;  
 Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式


提供者,消费者两边都可以设置,都有效;


#### (8)失败降级


失败降级是指访问失败时,返回一个降级方案,即“打了折扣”的响应结果,使用mock属性设置,如下:



@Reference(mock = “return 请求错误”)
private UserService userService;


另外,还可以有其他几种用法:



调用失败,返回请求错误

mock = “return 请求错误”

不发起远程调用,直接返回null,不管请求成功与否,都返回null

mock = “force:return null”

发起远程调用,失败后返回null

mock = “fail:return null”

发起远程调用,失败后抛异常

mock = “throw”

调用失败后使用自己实现的降级方案

mock = “自定义类的全限定类名”

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式
Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式
Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式
Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式
Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
Dubbo+Zookeeper使用_dubbo zookeeper配置,2024年程序员学习,dubbo,zookeeper,分布式

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-s4Faq2XJ-1712830332378)]
[外链图片转存中…(img-96SHEz3a-1712830332378)]
[外链图片转存中…(img-MKbZs2bs-1712830332379)]
[外链图片转存中…(img-pdwpnt73-1712830332379)]
[外链图片转存中…(img-mN58K4ss-1712830332380)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-ZnWgl2RB-1712830332380)]文章来源地址https://www.toymoban.com/news/detail-852687.html

到了这里,关于Dubbo+Zookeeper使用_dubbo zookeeper配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot + Dubbo + zookeeper实现

    目录 一,框架搭建 1. 启动zookeeper ! 2. IDEA创建一个空项目; 3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可 4.项目创建完毕,我们写一个服务,比如卖票的服务 编写接口 编写实现类 编写service 二,服务提供者 1,第一步  zookeeper的包我们去maven仓库下载,

    2024年04月26日
    浏览(40)
  • Spingboot整合Dubbo+zookeeper

    2023-12-26 19:38:05 最近学习分布式技术:Dubbo+zookeeper,准备写一个demo用springboot整合dubbo和zookeeper。但是看了网上一些教程都是几年前的,试着跟着写了几个demo没一个跑起来,基本是maven依赖方面的问题。 1、点击创建一个springboot项目 2、勾选web和lombok 3、创建 4、修改IDEA的Maven配置

    2024年02月04日
    浏览(49)
  • SpringBoot整合Dubbo+Zookeeper

    Dubbo概述 学习Dubbo前你要了解这些 安装zk Zookeeper概述与安装 Dubbo在zk中的存储结构 Dubbo的注册中心有哪些 1、 Multicast :Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。 2、 Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推

    2024年02月04日
    浏览(43)
  • 服务框架Dubbo和ZooKeeper

    本篇为动物园之旅~ dubbo看作动物园的动物,那么zookeeper就是动物园 如果有人想去动物园看小老虎,那么动物园中有小老虎才能看到,否则看不到~ 关系:dubbo与 zookeeper的关系 Dubbo建议使用Zookeeper作为服务的注册中心 大型互联网项目的架构目标 传统项目和互联网项目 大型互联

    2024年02月03日
    浏览(44)
  • Dubbo+Zookeeper 实现服务远程调用

    提示:以下是本篇文章正文内容,Java 系列学习将会持续更新 官方文档 :https://cn.dubbo.apache.org/zh-cn/#td-block-1 Dubbo 是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。 致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。 三个核心功能: 基于接

    2023年04月19日
    浏览(41)
  • 记录 Dubbo+Zookeeper 学习Demo

    结合Dubbo官网学习如何完成SpringBoot+Dubbo+Zookeeper集成的学习,本次采用环境如下: 开发工具:IntelliJ IDEA Community Edition 2023.2.5 (IDEA社区版 2023.2.5) 开发环境:JDK 1.8,Windows 11 Dubbo 3.2.0-beta.4,SpringBoot 2.7.8, Zookeeper 3.8.4 辅助程序:dubbo-admin-develop 下载地址:https://zookeeper.apache.

    2024年03月15日
    浏览(60)
  • 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日
    浏览(48)
  • springboot+dubbo+zookeeper 项目实战

    现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。 springboot集成dubbo dubbo框架总结 因此我们需要使用dubbo,也就是rpc协议。

    2024年02月03日
    浏览(39)
  • 【SpringBoot整合Dubbo和Zookeeper】

    本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一、Dubbo dubbo基本概念 调用关系说明 二、Dubbo环境搭建  三、Window下安装zookeeper 1、下载zookeeper  2、运行 3、测试 四、window下安装dubbo-admin 1、下载dubbo-admin 2、解压进入目录 3、在项目目录下打包dubbo-admin 4、执行 五、S

    2024年02月08日
    浏览(35)
  • dubbo和zookeeper作用以及关系

    Dubbo建议使用Zookeeper作为服务的注册中心。 Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以 通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如

    2024年02月14日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包