目录
使用Zookeeper实现负载均衡原理
dobbo rcp远程调用框架
dobbo里的注册中心用zeekeeper 注册中心做服务治理 用临时节点--服务挂了,临时节点自动删除
使用Zookeeper实现负载均衡原理,服务器端将启动的服务注册到zk注册中心上,采用临时节点。客户端从zk节点上获取最新服务节点信息,本地使用负载均衡算法,随机分配服务器。
Zookeeper实现分布式锁原理
临时节点:会话连接失效,值会自动删除
使用临时节点,在多个服务器创建同一个临时节点,只要谁在临时节点上创建成功,谁就拿到锁,其他服务器没有在zk上创建节点成功,应该等待。
其他服务器没有在zk上创建节点成功,应该等待。什么时候唤醒,使用事件的通知,获取节点被删除,重新进入获取锁的资源。
创建项目工程
Maven依赖
<dependencies>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.8</version>
</dependency>
</dependencies>
创建Server服务端
ZkServerScoekt服务
//##ServerScoekt服务端
public class ZkServerScoekt implements Runnable {
private int port = 18080;
public static void main(String[] args) throws IOException {
int port = 18080;
ZkServerScoekt server = new ZkServerScoekt(port);
Thread thread = new Thread(server);
thread.start();
}
public ZkServerScoekt(int port) {
this.port = port;
}
public void run() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(port);
System.out.println("Server start port:" + port);
Socket socket = null;
while (true) {
socket = serverSocket.accept();
new Thread(new ServerHandler(socket)).start();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (Exception e2) {
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
//ServerHandler
public class ServerHandler implements Runnable {
private Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
public void run() {
BufferedReader