/** * 根据方法的服务质量过滤,优先保留服务质量good的clients,数量低于least时加入服务质量normal的clients * * @param clientList * @param request * @param least 最少保留个数 * @return */ public List<Client> getQualityPreferClients( List<Client> clientList, InvocationRequest request, float least) { // 筛选good,normal,bad clients // 直接进行服务质量路由,先只保留服务质量good的,如果不够(比如少于1个),加入服务质量normal的 if (!CollectionUtils.isEmpty(addrReqUrlQualities)) { String requestUrl = getRequestUrl(request); Map<RequrlQuality, List<Client>> filterQualityClientsMap = new HashMap<RequrlQuality, List<Client>>(); for (RequrlQuality reqQuality : RequrlQuality.values()) { filterQualityClientsMap.put(reqQuality, new ArrayList<Client>()); } for (Client client : clientList) { if (addrReqUrlQualities.containsKey(client.getAddress())) { ConcurrentHashMap<String, Quality> reqUrlQualities = addrReqUrlQualities.get(client.getAddress()); if (reqUrlQualities.containsKey(requestUrl)) { Quality quality = reqUrlQualities.get(requestUrl); switch (quality.getQuality()) { case REQURL_QUALITY_GOOD: filterQualityClientsMap.get(RequrlQuality.REQURL_QUALITY_GOOD).add(client); break; case REQURL_QUALITY_NORNAL: filterQualityClientsMap.get(RequrlQuality.REQURL_QUALITY_NORNAL).add(client); break; case REQURL_QUALITY_BAD: filterQualityClientsMap.get(RequrlQuality.REQURL_QUALITY_BAD).add(client); break; default: // never be here break; } } } } List<Client> filterQualityClients = new ArrayList<Client>(); filterQualityClients.addAll(filterQualityClientsMap.get(RequrlQuality.REQURL_QUALITY_GOOD)); if (filterQualityClients.size() < least) { filterQualityClients.addAll( filterQualityClientsMap.get(RequrlQuality.REQURL_QUALITY_NORNAL)); } return filterQualityClients; } return clientList; }