通俗易懂的 Dubbo 教程(七):Dubbo 的高可用:zookeeper 宕机与 Dubbo 直连

zookeeper 宕机

原理

之前,我们一直使用 zookeeper 作为 Dubbo 的注册中心来使用,那么如果 zookeeper 宕机,会有什么后果呢?

其实,就算 zookeeper 宕机,我们依然可以消费 Dubbo 暴露的服务。为什么呢?其实这是因为在注册中心宕机之后,服务提供者和服务消费者仍能通过本地缓存通讯。

测试

我们在不运行 zookeeper 的情况下,运行服务提供者和服务消费者, 可以发现服务提供者和服务消费者一直报以下异常,且一直尝试连接 zookeeper。
在这里插入图片描述
我们尝试是否能调用服务提供者提供的服务,发现无法访问,这是因为这时候服务提供者和服务消费者还没有进行过通信,没有缓存。
在这里插入图片描述
我们将 zookeeper 打开,再次运行服务提供者和服务消费者,显然这次可以正确运行。
在这里插入图片描述

接下来我们关闭 zookeeper ,不关闭服务提供者和服务消费者,可以发现它们会再次报错,且会一直尝试重连 zookeeper 。

zookeeper

调用服务提供者提供的服务,发现是可以访问的,证明了即使 zookeeper 宕机,只要服务提供者和服务消费者之前进行过通信,它们仍能通过本地缓存进行通讯。

Dubbo 直连

什么是 Dubbo 直连?

在开发以及测试中,我们经常需要不使用注册中心,直接指定服务提供者,这时我们需要点对点直连的方式。

需要注意的是,该功能一般用于测试或开发时进行调试,不能在线上使用这个功能。

实现

实现 Dubbo 直连的功能非常简单,只需要在 @Reference 标签中指定一个 url 属性即可,该 url 属性代表直连的服务提供者的地址。

package edu.szu.consumer.serviceImpl;

import com.alibaba.dubbo.config.annotation.Reference;
import edu.szu.api.service.NameService;
import edu.szu.consumer.service.ChangeService;
import org.springframework.stereotype.Component;

@Component
public class ChangeServiceImpl implements ChangeService {

    //直连服务提供者
    @Reference(url = "dubbo://127.0.0.1:20880")
    NameService nameService;

    @Override
    public String change(String name) {
        return nameService.updateName(name);
    }
}
测试

我们关闭 zookeeper,运行服务提供者和服务消费者,发现可以正确返回,证明我们的 Dubbo 直连功能实现成功。

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值