docs: public JobClientNode getAvailableJobClient(String nodeGroup) {
  
          Set<JobClientNode> jobClientNodes = NODE_MAP.get(nodeGroup);
  
          if (CollectionUtils.isEmpty(jobClientNodes)) {
              return null;
          }
  
          List<JobClientNode> list = new ArrayList<JobClientNode>(jobClientNodes);
  
          while (list.size() > 0) {
  
              JobClientNode jobClientNode = loadBalance.select(list, null);
  
              if (jobClientNode != null && (jobClientNode.getChannel() == null || jobClientNode.getChannel().isClosed())) {
                  ChannelWrapper channel = appContext.getChannelManager().getChannel(jobClientNode.getNodeGroup(), NodeType.JOB_CLIENT, jobClientNode.getIdentity());
                  if (channel != null) {
                      // 更新channel
                      jobClientNode.setChannel(channel);
                  }
              }
  
              if (jobClientNode != null && jobClientNode.getChannel() != null && !jobClientNode.getChannel().isClosed()) {
                  return jobClientNode;
              } else {
                  list.remove(jobClientNode);
              }
          }
          return null;
      }