带你学Dubbo---使用Zookeeper注册中心

783 阅读3分钟

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

改造 dubbo—使用 Zookeeper

拷贝项目

image.png

新项目加入 zookeepeer 客户端依赖:

image.png

zk-node-shop-orderservice 服务 dubbo 配置文件

加入红色方框中的内容,使用 zookeeper 注册中心

image.png

zk-node-shop-userservice 服务 dubbo 配置文件

加入红色方框中的内容,使用 zookeeper 注册中心

image.png

运行应用

1. 先启动注册中心

2. 再启动 tomcat 服务器

3. 访问 zk-node-shop-web 的 index.jsp

注册中心的高可用

概念:

高可用性(High Availability)

通常来描述一个系统经过专门的设计,从而减少不能提供服务的时间,而保持其服务的高度可用性。

Zookeeper 是高可用的,健壮的。Zookeeper 宕机,正在运行中的 dubbo 服务仍然可以正常访问。

健壮性

  • 监控中心宕掉不影响使用,只是丢失部分采样数据
  • 注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
  • 服务提供者无状态,任意一台宕掉后,不影响使用
  • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

演示操作:

1. 先启动 zookeeper, dubbo 服务提供者,dubbo 服务消费者。

2. 测试正常访问

3. 停止 zookeeper

4. 测试消费者仍然可以访问提供者

配置原则

在服务提供者配置访问参数。因为服务提供者更了解服务的各种参数。

关闭检查

dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=true。通过 check="false"关闭检查, 比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

例 1:关闭某个服务的启动时检查

<dubbo:reference interface="com.foo.BarService" check="false" />

例 2:关闭注册中心启动时检查

<dubbo:registry check="false" />

默认启动服务时检查注册中心存在并已运行。注册中心不启动会报错。

重试次数

消费者访问提供者,如果访问失败,则切换重试访问其它服务器,但重试会带来更长延迟。访问时间变长,用户的体验较差。多次重新访问服务器有可能访问成功。可通过 retries="2" 来设置重试次数(不含第一次)。

image.png

超时时间

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。

timeout:调用远程服务超时时间(毫秒)

dubbo 消费端

image.png

dubbo 服务端

image.png

版本号

每个接口都应定义版本号,为后续不兼容升级提供可能。当一个接口有不同的实现,项目早期使用的一个实现类, 之后创建接口的新的实现类。区分不同的接口实现使用 version。

复制 zk-node-shop-userservice 为 zk-node-shop-multi-userservice

复制 UserServiceImpl.java

image.png

UserServiceImpl2 中的地址信息都加入 2 的内容,用来区别原始的数据。

dubbo 配置文件 userservice-provider.xml

增加版本 version 标志     

image.png

复制 zk-node-shop-web 项目为 zk-node-shop-multi-web

(3) ShopService 接口

image.png

(4) ShopServiceImpl 接口实现类

image.png

(5) ShopController 类中添加方法

image.png

(6) 修改消费者配置文件

image.png

测试应用

1.先启动 zookeeper 

2.启动 tomcat

3.访问服务

比较订单中的地址 ,查看用户信息的地址是不同的内容