提交 19832c73 编写于 作者: S shuang.kou

[feat]add random loadbalance

上级 a083aca4
......@@ -17,6 +17,8 @@ public class NettyClientMain {
//如需使用 assert 断言,需要在 VM options 添加参数:-ea
assert "Hello description is 222".equals(hello);
Thread.sleep(12000);
helloService.hello(new Hello("111", "222"));
for (int i = 0; i < 10; i++) {
helloService.hello(new Hello("111", "222"));
}
}
}
package github.javaguide;
import github.javaguide.remoting.transport.netty.server.NettyServer;
/**
* @author shuang.kou
* @createTime 2020年05月10日 07:25:00
*/
public class NettyServerMain2 {
public static void main(String[] args) {
HelloService helloService = new HelloServiceImpl();
NettyServer nettyServer = new NettyServer("127.0.0.1", 9998);
nettyServer.publishService(helloService, HelloService.class);
}
}
package github.javaguide.loadbalance;
import java.util.List;
/**
* @author shuang.kou
* @createTime 2020年06月21日 07:44:00
*/
public abstract class AbstractLoadBalance implements LoadBalance {
@Override
public String selectServiceAddress(List<String> serviceAddresses) {
if (serviceAddresses == null || serviceAddresses.size() == 0) {
return null;
}
if (serviceAddresses.size() == 1) {
return serviceAddresses.get(0);
}
return doSelect(serviceAddresses);
}
protected abstract String doSelect(List<String> serviceAddresses);
}
package github.javaguide.loadbalance;
import java.util.List;
/**
* @author shuang.kou
* @createTime 2020年06月21日 07:44:00
*/
public interface LoadBalance {
/**
* 在已有服务提供地址列表中选择一个
*
* @param serviceAddresses 服务地址列表
* @return 目标服务地址
*/
String selectServiceAddress(List<String> serviceAddresses);
}
package github.javaguide.loadbalance;
import java.util.List;
import java.util.Random;
/**
* @author shuang.kou
* @createTime 2020年06月21日 07:47:00
*/
public class RandomLoadBalance extends AbstractLoadBalance {
@Override
protected String doSelect(List<String> serviceAddresses) {
Random random = new Random();
return serviceAddresses.get(random.nextInt(serviceAddresses.size()));
}
}
package github.javaguide.registry;
import github.javaguide.loadbalance.LoadBalance;
import github.javaguide.loadbalance.RandomLoadBalance;
import github.javaguide.utils.zk.CuratorUtils;
import lombok.extern.slf4j.Slf4j;
import java.net.InetSocketAddress;
import java.util.List;
/**
* 基于 zookeeper 实现服务发现
......@@ -13,14 +16,20 @@ import java.net.InetSocketAddress;
*/
@Slf4j
public class ZkServiceDiscovery implements ServiceDiscovery {
private final LoadBalance loadBalance;
public ZkServiceDiscovery() {
this.loadBalance = new RandomLoadBalance();
}
@Override
public InetSocketAddress lookupService(String serviceName) {
// TODO(shuang.kou):feat: 负载均衡
// 这里直接去了第一个找到的服务地址,eg:127.0.0.1:9999
String serviceAddress = CuratorUtils.getChildrenNodes(serviceName).get(0);
log.info("成功找到服务地址:[{}]", serviceAddress);
String[] socketAddressArray = serviceAddress.split(":");
List<String> serviceUrlList = CuratorUtils.getChildrenNodes(serviceName);
// 负载均衡
String targetServiceUrl = loadBalance.selectServiceAddress(serviceUrlList);
log.info("成功找到服务地址:[{}]", targetServiceUrl);
String[] socketAddressArray = targetServiceUrl.split(":");
String host = socketAddressArray[0];
int port = Integer.parseInt(socketAddressArray[1]);
return new InetSocketAddress(host, port);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册