feat:(1.3.0-beta1): 优化服务端续租
This commit is contained in:
		
							parent
							
								
									45af9d09b9
								
							
						
					
					
						commit
						ef11025fee
					
				@ -90,16 +90,14 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static List<ServerNode> getExpireNodes() {
 | 
					    public static List<ServerNode> getExpireNodes() {
 | 
				
			||||||
        try {
 | 
					
 | 
				
			||||||
            ServerNode serverNode = QUEUE.poll(5L, TimeUnit.SECONDS);
 | 
					        ServerNode serverNode = QUEUE.poll();
 | 
				
			||||||
            if (Objects.nonNull(serverNode)) {
 | 
					        if (Objects.nonNull(serverNode)) {
 | 
				
			||||||
                List<ServerNode> lists = Lists.newArrayList(serverNode);
 | 
					            List<ServerNode> lists = Lists.newArrayList(serverNode);
 | 
				
			||||||
                QUEUE.drainTo(lists, 256);
 | 
					            QUEUE.drainTo(lists, 256);
 | 
				
			||||||
                return lists;
 | 
					            return lists;
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } catch (InterruptedException e) {
 | 
					 | 
				
			||||||
            SnailJobLog.LOCAL.error("client get expireNodes error.");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -121,8 +119,7 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Component
 | 
					    @Component
 | 
				
			||||||
    public class RefreshNodeSchedule extends AbstractSchedule {
 | 
					    public class RefreshNodeSchedule extends AbstractSchedule {
 | 
				
			||||||
        private final ExecutorService executorService = Executors.newFixedThreadPool(5);
 | 
					        private ThreadPoolExecutor refreshNodePool;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        protected void doExecute() {
 | 
					        protected void doExecute() {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
@ -145,7 +142,7 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
                if (!serverNodes.isEmpty()) {
 | 
					                if (!serverNodes.isEmpty()) {
 | 
				
			||||||
                    // 并行获取所有服务端需要注册的列表
 | 
					                    // 并行获取所有服务端需要注册的列表
 | 
				
			||||||
                    // 获取列表 并完成注册/本地完成续签
 | 
					                    // 获取列表 并完成注册/本地完成续签
 | 
				
			||||||
                    List<ServerNode> allClientList = collectAllClientQueue(serverNodes);
 | 
					                    List<ServerNode> allClientList = pullRemoteNodeClientRegisterInfo(serverNodes);
 | 
				
			||||||
                    if (CollUtil.isNotEmpty(allClientList)) {
 | 
					                    if (CollUtil.isNotEmpty(allClientList)) {
 | 
				
			||||||
                        waitRefreshDBClientNodes.addAll(allClientList);
 | 
					                        waitRefreshDBClientNodes.addAll(allClientList);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@ -166,7 +163,7 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private List<ServerNode> collectAllClientQueue(List<ServerNode> serverNodes) {
 | 
					        private List<ServerNode> pullRemoteNodeClientRegisterInfo(List<ServerNode> serverNodes) {
 | 
				
			||||||
            if (CollUtil.isEmpty(serverNodes)) {
 | 
					            if (CollUtil.isEmpty(serverNodes)) {
 | 
				
			||||||
                return Lists.newArrayList();
 | 
					                return Lists.newArrayList();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -175,7 +172,7 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
            // 存储处理结果
 | 
					            // 存储处理结果
 | 
				
			||||||
            List<Future<String>> futures = new ArrayList<>(size);
 | 
					            List<Future<String>> futures = new ArrayList<>(size);
 | 
				
			||||||
            for (ServerNode serverNode : serverNodes) {
 | 
					            for (ServerNode serverNode : serverNodes) {
 | 
				
			||||||
                Future<String> future = executorService.submit(() -> {
 | 
					                Future<String> future = refreshNodePool.submit(() -> {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        RegisterNodeInfo nodeInfo = new RegisterNodeInfo();
 | 
					                        RegisterNodeInfo nodeInfo = new RegisterNodeInfo();
 | 
				
			||||||
                        nodeInfo.setHostId(serverNode.getHostId());
 | 
					                        nodeInfo.setHostId(serverNode.getHostId());
 | 
				
			||||||
@ -198,6 +195,7 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
            return futures.stream()
 | 
					            return futures.stream()
 | 
				
			||||||
                    .map(future -> {
 | 
					                    .map(future -> {
 | 
				
			||||||
                        try {
 | 
					                        try {
 | 
				
			||||||
 | 
					                            // 后面可以考虑配置
 | 
				
			||||||
                            String jsonString = future.get(1, TimeUnit.SECONDS);
 | 
					                            String jsonString = future.get(1, TimeUnit.SECONDS);
 | 
				
			||||||
                            if (Objects.nonNull(jsonString)) {
 | 
					                            if (Objects.nonNull(jsonString)) {
 | 
				
			||||||
                                return JsonUtil.parseList(jsonString, ServerNode.class);
 | 
					                                return JsonUtil.parseList(jsonString, ServerNode.class);
 | 
				
			||||||
@ -241,6 +239,10 @@ public class ClientRegister extends AbstractRegister {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void startScheduler() {
 | 
					        public void startScheduler() {
 | 
				
			||||||
 | 
					            // 后面可以考虑配置
 | 
				
			||||||
 | 
					            refreshNodePool = new ThreadPoolExecutor(4, 8, 1, TimeUnit.SECONDS,
 | 
				
			||||||
 | 
					                    new LinkedBlockingDeque<>(1000));
 | 
				
			||||||
 | 
					            refreshNodePool.allowCoreThreadTimeOut(true);
 | 
				
			||||||
            taskScheduler.scheduleWithFixedDelay(this::execute, Instant.now(), Duration.parse("PT5S"));
 | 
					            taskScheduler.scheduleWithFixedDelay(this::execute, Instant.now(), Duration.parse("PT5S"));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@ public class NettyHttpClientHandler extends SimpleChannelInboundHandler<FullHttp
 | 
				
			|||||||
        String content = response.content().toString(CharsetUtil.UTF_8);
 | 
					        String content = response.content().toString(CharsetUtil.UTF_8);
 | 
				
			||||||
        HttpHeaders headers = response.headers();
 | 
					        HttpHeaders headers = response.headers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        SnailJobLog.LOCAL.info("Receive server data content:[{}], headers:[{}]", content, headers);
 | 
					        SnailJobLog.LOCAL.debug("Receive server data content:[{}], headers:[{}]", content, headers);
 | 
				
			||||||
        SnailJobRpcResult snailJobRpcResult = JsonUtil.parseObject(content, SnailJobRpcResult.class);
 | 
					        SnailJobRpcResult snailJobRpcResult = JsonUtil.parseObject(content, SnailJobRpcResult.class);
 | 
				
			||||||
        RpcContext.invoke(snailJobRpcResult.getReqId(), snailJobRpcResult, false);
 | 
					        RpcContext.invoke(snailJobRpcResult.getReqId(), snailJobRpcResult, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user