From aa37940d1b7a5b9133b90a225d482e4e4c782af7 Mon Sep 17 00:00:00 2001 From: zhangxin10 Date: Tue, 1 Dec 2015 18:29:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3DataSenderFactory=E4=B8=AD?= =?UTF-8?q?=E7=9A=84DataSenderChecker=E5=AF=B9=E4=BA=8E=E6=8C=89=E7=99=BE?= =?UTF-8?q?=E5=88=86=E6=AF=94=E9=80=89=E6=8B=A9=E8=BF=9E=E6=8E=A5=EF=BC=8C?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skywalking/sender/DataSenderFactory.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java index af82457c43..7b14204336 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java @@ -21,8 +21,8 @@ public class DataSenderFactory { private static Logger logger = Logger.getLogger(DataSenderFactory.class.getName()); - private static Set socketAddresses = new HashSet(); - private static Set unUsedSocketAddresses = new HashSet(); + private static List socketAddresses = new ArrayList(); + private static List unUsedSocketAddresses = new ArrayList(); private static List availableSenders = new ArrayList(); private static Object lock = new Object(); @@ -31,13 +31,17 @@ public class DataSenderFactory { if (StringUtil.isEmpty(Config.Sender.SERVERS_ADDR)) { throw new IllegalArgumentException("Collection service configuration error."); } - + //过滤重复地址 + Set tmpSocktAddress = new HashSet(); for (String serverConfig : Config.Sender.SERVERS_ADDR.split(";")) { String[] server = serverConfig.split(":"); if (server.length != 2) throw new IllegalArgumentException("Collection service configuration error."); - socketAddresses.add(new InetSocketAddress(server[0], Integer.valueOf(server[1]))); + tmpSocktAddress.add(new InetSocketAddress(server[0], Integer.valueOf(server[1]))); } + + socketAddresses.addAll(tmpSocktAddress); + } catch (Exception e) { logger.log(Level.ALL, "Collection service configuration error.", e); System.exit(-1); @@ -51,7 +55,7 @@ public class DataSenderFactory { try { Thread.sleep(RETRY_GET_SENDER_WAIT_INTERVAL); } catch (InterruptedException e) { - logger.log(Level.ALL, "Sleep failure", e); + logger.log(Level.ALL, "Sleep failure", e); } } return availableSenders.get(ThreadLocalRandom.current().nextInt(0, availableSenders.size())); @@ -72,18 +76,18 @@ public class DataSenderFactory { // 初始化DataSender List usedSocketAddress = new ArrayList(); - for (SocketAddress socketAddress : socketAddresses) { - if (availableSenders.size() >= availableSize) { - break; - } + int index; + while (availableSenders.size() < availableSize) { + // 随机获取服务器地址 + index = ThreadLocalRandom.current().nextInt(socketAddresses.size()); try { - availableSenders.add(new DataSender(socketAddress)); - usedSocketAddress.add(socketAddress); + availableSenders.add(new DataSender(socketAddresses.get(index))); + usedSocketAddress.add(socketAddresses.get(index)); } catch (IOException e) { - unUsedSocketAddresses.add(socketAddress); + unUsedSocketAddresses.add(socketAddresses.get(index)); } } - unUsedSocketAddresses = new HashSet(socketAddresses); + unUsedSocketAddresses = new ArrayList(socketAddresses); unUsedSocketAddresses.removeAll(usedSocketAddress); } -- GitLab