zookeeper 宕机
原理
之前,我们一直使用 zookeeper 作为 Dubbo 的注册中心来使用,那么如果 zookeeper 宕机,会有什么后果呢?
其实,就算 zookeeper 宕机,我们依然可以消费 Dubbo 暴露的服务。为什么呢?其实这是因为在注册中心宕机之后,服务提供者和服务消费者仍能通过本地缓存通讯。
测试
我们在不运行 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 直连功能实现成功。